WCF单线程?同步通话?

时间:2013-04-12 18:52:10

标签: multithreading wcf thread-safety

我有一个WCF服务,充当应用程序之间的中间件:当WCF从多个客户端(例如,系统A)接收多个调用。每个呼叫都会调用另一个系统(例如,系统B)。

是否可以每次都进行一次对系统B的调用?而不是对呼叫进行反对分析?

1 个答案:

答案 0 :(得分:3)

如果系统B不关心它被调用哪个线程,但你只是想确保多个线程不同时调用它(也许是因为你知道系统B依赖于全局变量或全局状态),您可以使用简单的互斥锁使所有线程排成一行并通过系统B单个文件。像这样:

public class MyClass
{
  private static object _lockObj = new Object();

  public void MyFunction()
  {
    lock(_lockObj)  
    {
      system_B_call(etc);
    }
  }
}

重要提示:您要“限制”的所有功能必须使用相同的锁定对象实例。

如果您的系统B对其所调用的线程敏感(许多UI框架,包括WinForms和WCF需要在主UI线程上进行UI更改),那么您需要将调用编组到特定线程上。有几种方法可以做到这一点,其中一种方法是使用SynchronizationContext及其Post或Send方法。