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