2011-10-11 67 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

相关问题