【问题标题】:Long calculation in a wcf restful servicewcf 宁静服务中的长时间计算
【发布时间】:2012-06-28 22:34:48
【问题描述】:

我有一个 WCF RESTful 服务,它工作正常,问题是该服务公开了一个“计算”方法,可能需要几分钟才能完成计算,而且由于 REST 是一种无状态方法,我快用完了的想法!

我应该保持会话吗?

如何进行回调?

在一个网站等10分钟响应不方便,但我必须找到解决办法。

PS:服务必须是restful,我不能减少计算时间。

【问题讨论】:

  • 调用您的服务的客户的性质是什么?
  • 服务很安静,因为很多客户端都可以调用它; Winforms、Silverlight、Android、...

标签: wcf-rest webhttpbinding


【解决方案1】:

我询问了您的客户,因为如果他们只是 .Net,您可以实现异步编程模型,但因为他们不是...

你可以在这篇文章中做类似的事情 - WCF Rest Asynchronous Calling Methods

基本上,您的方法将产生一个额外的线程来执行实际的计算工作,并在主线程中立即将某种令牌返回给调用客户端。然后客户端可以在轮询方法中使用此令牌来检查计算是否完成。

【讨论】:

  • 非常感谢@EkoostikMartin,这似乎是最好的解决方案,但我想知道如何实现异步模型(只是为我的老板寻找论据:D)
  • 见这里 - level533.com/2010/11/… 和这里 stackoverflow.com/a/5959371/903056 - 这并不难完成,也很酷,因为你仍然可以同步提供相同的服务(如果对你有帮助,请标记我的答案:) )
  • 再次感谢@EkoostikMartin,它有很大帮助(对不起,我是新来的,我没有注意标记:D)
  • 不客气,如有任何后续问题,请随时在此处添加,我会尽力解答。
【解决方案2】:

您可以创建一个单向 WebMethod 来提交初始计算请求。在您的计算代码中,您需要更新一个数据库表或类似的进度,无论是百分比还是完成。

然后,您需要使用上表创建一个额外的“轮询”方法,您可以使用它来检查状态。

当您的计算方法将其标记为完成时,您可以调用最终的“GetResults”方法来完成此操作。

我们对通过网络服务提交的大文件导入做了类似的事情,效果很好。

一些信息;

http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapdocumentmethodattribute.oneway(v=vs.71).aspx

【讨论】:

  • WCF Rest 服务不是基于肥皂的(它的 webhttp),我认为这不会起作用。
猜你喜欢
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多