1
奇怪的行为我有一个WCF服务是这样的:对WCF InstanceContextMode.Single + ConcurrencyMode.Single
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class MyWcfService
{
public void StartIt()
{
MyWorkManager mgr = new MyWorkManager(new MyWorker());
mgr.StartWorker();
}
}
MyWrokManger的StartWorker方法只是开始用start方法一个新的线程指出MyWorker的StartWork方法。这里的MyWorker类:
public class MyWorker
{
public void StartWork()
{
Mylogger.Log("Starting work...");
// Call a long running method
LongRunningMethod();
Mylogger.Log("Completed work.");
}
private void WorkerMethod()
{
Mylogger.Log("Starting WorkerMethod()...");
// do something here
Mylogger.Log("Completed WorkerMethod().");
}
}
然后我用我的客户来调用服务两次在一个循环中,在这里就是我在日志中看到(按时间戳排序):
Invocation ThreadID Message
=================================================
1 5 Starting work...
2 7 Starting work...
2 7 Starting WorkerMethod()...
1 5 Starting WorkerMethod()...
2 7 Completed WorkerMethod().
1 5 Completed WorkerMethod().
2 7 Completed work.
1 5 Completed work.
哪有第二在第一次之前完成调用?我认为每个方法调用都是顺序的。我错过了什么?
是的,我认为这是问题所在。 WCF InstanceContext和Concurrency模式只控制服务线程,但我的工作管理器产生了我需要管理自己的工作线程。 – notlkk 2011-01-21 00:42:18