2013-04-12 30 views
0

我有一個WCF服務,作爲應用程序之間的中間件:WCF WCF接收來自多個客戶端(比如系統A)的多個調用。每個呼叫都會導致對另一個系統的呼叫(比如系統B)。WCF單線程?同步通話?

是否有可能使系統B的呼叫每次都發生一次?而不是使呼叫虛擬化?

回答

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