【发布时间】:2011-07-30 00:11:23
【问题描述】:
我有以下情况:我的 WCF 服务允许客户端注册以等待某些事件。等待在服务端是异步的,即注册服务员,当进程完成后,通知服务员。目前,它只是一个ManualResetEvent。
现在我想通过 WCF 公开这个方法。我尝试使用AsyncPattern=true 并创建了两个方法,BeginWait 将事件捆绑到IAsyncResult 和EndWait 调用AsyncWaitHandle.WaitOne()。但是,如果我从客户端调用BeginWait、EndWait,则不会执行服务器端EndWait。我使用的是手动实现的包装器(我的代理类是从ChannelBase<IWaitService>, IWaitService派生的),它基本上调用Channel.EndWait(),并且确实调用了这个函数;但在服务器端,调用永远不会到达。
我在这里做错了什么?后续问题:如果异步调用正常工作,有没有一种简单的方法可以在客户端实现同步?
【问题讨论】:
-
您可能想查看blogs.msdn.com/mjm/archive/2005/05/04/414793.aspx 主要是为了知道sync-versus-async 是一个“本地”的东西(您可以从客户端调用方法同步或异步,这可能会被实现在服务器上同步或异步,两者没有任何关系)。
-
基本上,那篇博文解决了它——你能从你的评论中回答一下,这样我就可以接受了吗?