我有一个WCF Web服务(不在我的控制下),它实现了我需要通过IsOneWay = true +一个回调接口访问的功能,这是一种通知处理完成的方法。它是以这种方式编写的,因为它最初是为从GUI访问而设计的。
但是我需要从控制台应用程序访问同一个方法以便在批处理中使用。目前,我实现这一目标的原始方法是将标志设置为false,并在调用WCF方法之后,实现一个带有简短Thread.Sleep()调用的while循环。这显然有效但似乎是实现最终结果的一种非常糟糕的方式。
我想知道这样做的正确方法是什么。注意:该服务不受我的控制,并且刚刚通过IDE添加了引用,尽管我可以轻松地完成代码实现等。
答案 0 :(得分:4)
使用ManualResetEvent等待完成。在服务上调用单向异步方法,然后等待manualresetevent对象。在你的回调中调用Set()方法,它会让你的主线程在WaitOne()调用之后继续执行:
var waitHandle = new ManualResetEvent();
yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();
void CallbackMethodRaisedByWCFService()
{
waitHandle.Set();
}