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方法。