由于内部操作依赖于不支持多线程调用的旧 COM 对象,我需要强制我的 WCF 服务在单个线程中运行。
然后我编写了以下示例代码,但它没有按我预期的那样工作:(
[ServiceContract]
public interface ITestService
{
[OperationContract]
void TestAction();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class TestServiceImp : ITestService
{
void TestAction()
{
Trace.WriteLine("Entering method TestAction, Thread={0}" + Thread.CurrentThread.ManagedThreadId);
//...
Trace.WriteLine("Leaving method TestAction, Thread={0}" + Thread.CurrentThread.ManagedThreadId);
}
}
实际结果如下所示,
进入方法TestAction,Thread=4
离开方法TestAction,Thread=4
进入方法TestAction,Thread=5
离开方法TestAction,Thread=5
进入方法TestAction,Thread=8
离开方法TestAction,Thread=8
而我的期望是,
进入方法TestAction,Thread=4
离开方法TestAction,Thread=4
进入方法TestAction,Thread=4
离开方法TestAction,Thread=4
进入方法TestAction,Thread=4
离开方法TestAction,Thread=4
我怎么能得到我想要的?谢谢。