我有一个WCF服务操作,我想调用该操作来启动一个长时间运行的方法,但是我希望该操作在长时间运行的方法之前返回其结果饰面。在wcf服务操作后调用方法返回了结果
我试过使用IParameterInspector实现,但操作的结果没有返回给客户端,直到长时间运行的方法完成。
我应该如何去实现这一点,因为我从操作开始的任何事情似乎都必须在结果返回给客户端之前完成?
谢谢。
我有一个WCF服务操作,我想调用该操作来启动一个长时间运行的方法,但是我希望该操作在长时间运行的方法之前返回其结果饰面。在wcf服务操作后调用方法返回了结果
我试过使用IParameterInspector实现,但操作的结果没有返回给客户端,直到长时间运行的方法完成。
我应该如何去实现这一点,因为我从操作开始的任何事情似乎都必须在结果返回给客户端之前完成?
谢谢。
您不能在WCF中使用标准的请求/响应类型绑定来做到这一点,因为正如您发现的,在服务完成处理(或超时)之前,您将不会得到响应。 要做你想做的事,你需要一个服务,你可以触发长时间运行的操作,然后轮询完成状态&响应结果。
netMsmqBinding在WCF中支持这种情况。由于您只将消息放入队列进行处理,因此此绑定的所有操作都必须是单向调用。您需要为轮询方法配置一个请求/响应绑定的另一个端点或服务。一个好的overview of the netMsmqBinding is here.
如果你想在服务器上做到这一点,看看http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/17/wcf-extensibility-ioperationinvoker.aspx,它显示如何绕过操作(这是一个缓存场景,但它可以适应你的问题)。
如果您想在客户端执行此操作,您可以简单地异步调用操作,它将立即返回。当长时间运行完成时,您会收到一个通知(回调或事件),其结果已准备就绪。
这是一个有趣且可行的方法。我想我使用WCF扩展主要是为了基础设施类型职责。这在我看来更像是一个业务流程问题,所以我可能仍然会排队等候。感谢参与,获得不同的观点总是很好的! – 2011-05-19 16:15:11
我看了看,并得到它的工作,非常感谢! – JPJY 2011-05-27 12:52:04
然后您可以将其标记为答案:) – carlosfigueira 2011-05-27 14:23:21