0
我有一个WCF服务,作为应用程序之间的中间件:WCF WCF接收来自多个客户端(比如系统A)的多个调用。每个呼叫都会导致对另一个系统的呼叫(比如系统B)。WCF单线程?同步通话?
是否有可能使系统B的呼叫每次都发生一次?而不是使呼叫虚拟化?
我有一个WCF服务,作为应用程序之间的中间件:WCF WCF接收来自多个客户端(比如系统A)的多个调用。每个呼叫都会导致对另一个系统的呼叫(比如系统B)。WCF单线程?同步通话?
是否有可能使系统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方法。