【发布时间】:2011-05-19 22:15:31
【问题描述】:
我有一个 WCF 服务操作,我希望调用该操作来启动一个长时间运行的方法,但是我希望该操作在长时间运行的方法完成之前返回其结果。
我尝试过使用 IParameterInspector 实现,但在长时间运行的方法完成之前,操作的结果不会返回给客户端。
我应该如何实现这一点,因为我从操作开始的任何事情似乎都必须在结果返回给客户端之前完成?
谢谢。
【问题讨论】:
标签: wcf
我有一个 WCF 服务操作,我希望调用该操作来启动一个长时间运行的方法,但是我希望该操作在长时间运行的方法完成之前返回其结果。
我尝试过使用 IParameterInspector 实现,但在长时间运行的方法完成之前,操作的结果不会返回给客户端。
我应该如何实现这一点,因为我从操作开始的任何事情似乎都必须在结果返回给客户端之前完成?
谢谢。
【问题讨论】:
标签: wcf
如果你想在服务器上做,看看http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/17/wcf-extensibility-ioperationinvoker.aspx,它显示了如何绕过操作(这是一个缓存场景,但它可以适应你的问题)。
如果你想在客户端做,你可以简单地异步调用操作,它会立即返回。当长时间运行的操作完成时,您会收到通知(回调或事件),其结果已准备就绪。
【讨论】:
您不能使用 WCF 中的标准请求/响应类型绑定来执行此操作,因为您发现,在服务完成处理(或超时)之前,您不会得到响应。 为了做你想做的事,你需要一个服务,你可以在其中触发长时间运行的操作,然后轮询完成状态和响应结果。
netMsmqBinding 在 WCF 中支持这种情况。此绑定的所有操作都必须是单向调用,因为您只是将消息放入队列中进行处理。您需要使用轮询方法的请求/响应绑定配置另一个端点或服务。好overview of the netMsmqBinding is here.
【讨论】: