等待 C# 控制台应用程序中单向 WCF 调用完成

发布于 2024-12-09 02:02:55 字数 332 浏览 1 评论 0原文

我有一个 WCF Web 服务(不在我的控制之下),它实现了我需要通过 IsOneWay=true + 回调接口访问的功能,其中的方法之一通知处理完成。它是这样编写的,因为它最初是为从 GUI 访问而设计的。

但是,我需要从控制台应用程序访问相同的方法以便批量使用。目前,我实现此目的的粗略方法是将标志设置为 false,并在调用 WCF 方法后,我实现一个 while 循环,其中包含一个简短的 Thread.Sleep() 调用。这显然是有效的,但似乎是实现最终结果的一种非常糟糕的方法。

我想知道这样做的正确方法是什么。注意:该服务不受我的控制,并且刚刚通过 IDE 添加了引用,尽管我可以轻松地敲出代码实现等。

I have a WCF webservice (not under my control) that implements functionality I need to access via IsOneWay=true + a callback interface, one of the methods of which notifies of processing completion. It has been written this way as it was initially designed for access from a GUI.

However I need to access this same method from a console application for use in a batch. Currently my crude method of achieving this is to set a flag to false and after calling the WCF method I implement a while loop with a brief Thread.Sleep() call in it. This obviously works but seems like a really poor way of achieving the end result.

I'd like to know what the proper way of doing this is. Note: the service is out of my control and the reference has just been added through the IDE although I can easily knockup a code implementation etc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

和我恋爱吧 2024-12-16 02:02:55

使用 ManualResetEvent 等待完成。调用服务上的单向异步方法,然后等待 ManualResetEvent 对象。在回调中调用 Set() 方法,这将使主线程在 WaitOne() 调用后继续执行,如下所示:

var waitHandle = new ManualResetEvent();

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


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

Use a ManualResetEvent for waiting for completion. Call the one-way async method on the service and then wait on the manualresetevent object. In your callback call the Set() method which will let your main thread continue execution after WaitOne() call like so:

var waitHandle = new ManualResetEvent();

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


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文