2011-10-11 39 views
4

我有一個WCF web服務(不在我的控制下),它實現了我需要通過IsOneWay = true +一個回調接口訪問的功能,其中一種方法通知處理完成。它是這樣寫的,因爲它最初是爲從GUI訪問而設計的。等待在C#控制檯應用程序中完成單向WCF調用

但是我需要從一個控制檯應用程序訪問此批處理中使用的相同方法。目前,我的粗糙方法是將一個標誌設置爲false,並在調用WCF方法後,實現一個帶有簡短Thread.Sleep()調用的while循環。這顯然有效,但似乎是實現最終結果的非常糟糕的方式。

我想知道這樣做的正確方法是什麼。注意:服務超出了我的控制範圍,並且通過IDE添加了引用,儘管我可以輕鬆地實現代碼實現等。

回答

4

使用ManualResetEvent等待完成。調用服務上的單向異步方法,然後等待manualresetevent對象。在您的回調調用,這將讓你的主線程WaitOne的繼續(執行後)的set()方法調用,像這樣:

var waitHandle = new ManualResetEvent(); 

yourwcfObject.CallTheOneWayMethod(); 
waitHandle.WaitOne(); 


void CallbackMethodRaisedByWCFService() 
{ 
    waitHandle.Set(); 
} 
+2

@anonymouse:再看看(HTTP的['ManualResetEvent.WaitOne'的重載]: //msdn.microsoft.com/de-de/library/57deze2z.aspx)。您甚至可以設置超時以防止應用程序在發生錯誤時永遠等待。 – Stephan

相關問題