我有这样的WCF服务:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class MyWcfService
{
public void StartIt()
{
MyWorkManager mgr = new MyWorkManager(new MyWorker());
mgr.StartWorker();
}
}
MyWrokManger的StartWorker方法只是使用指向MyWorker的StartWork方法的start方法启动一个新线程。这是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.
第二次调用如何在第一次完成之前完成?我认为每个方法调用都是顺序的。我错过了什么?
答案 0 :(得分:1)
你在Start方法中加入创建的线程吗?如果不是它只是启动worker并完成,那么在您的工作线程运行时可以处理其他请求。 InstnaceContextMode
和ConcurrencyMode
仅影响服务线程,而不影响从服务操作启动的线程。因此,如果您的操作不等待工人完成,您可以在第一个工作人员完成工作之前多次调用操作。