我有一个 WCF 服务,它充当应用程序之间的中间件:WCF 接收来自多个客户端(例如系统 A)的多个调用。每个调用都会导致调用另一个系统(例如,系统 B)。
是否可以每次对系统 B 进行一次调用?而不是使通话瘫痪?
我有一个 WCF 服务,它充当应用程序之间的中间件:WCF 接收来自多个客户端(例如系统 A)的多个调用。每个调用都会导致调用另一个系统(例如,系统 B)。
是否可以每次对系统 B 进行一次调用?而不是使通话瘫痪?
如果系统 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 方法。