0

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

是否可以每次对系统 B 进行一次调用?而不是使通话瘫痪?

4

1 回答 1

3

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

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

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

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

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

于 2013-04-12T19:40:04.783 回答