为长时间运行的WCF服务设置超时时间

5

我有一个WCF服务方法,需要执行超过两个小时(运行一些报告)。我该如何确保它不会因为执行时间而超时?我认为在WCF配置中有很多超时设置,但我不确定哪一个与我相关。对于ASMX web服务,有一个选项可以指定无限超时设置,是否有类似的选项适用于WCF?此外,我需要更改任何IIS设置吗(WCF服务托管在IIS中),例如工作进程的回收、空闲超时等?

3个回答

8

这是对Web服务的滥用,请不要这样做。

相反,应该让Web服务启动长时间运行的操作,在单独的进程中运行。如果客户端需要知道报告何时完成,则“单独的进程”应该跟踪报告创建并在报告完成时进行记录。客户端可以调用Web服务来检查状态。

你真的不想依赖HTTP连接保持几个小时的时间。这是一个网络。在网络上会发生各种事情。坏事情。


是的,我认为你说得对,我正在尝试在Windows服务中托管WCF服务,以查看是否可以解决超时问题。 - RKP

5
您考虑使用回调函数吗?您的客户端发送请求,然后等待服务器通知什么时候完成操作?这可能需要改变客户端,但通过这种方式,您的服务可以“拉响链条”,并在报告完成时通知客户端。
帮助:http://idunno.org/archive/2008/05/29/wcf-callbacks-a-beginners-guide.aspx WCF超时:http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/ 您还应该考虑客户端的超时时间,例如绑定的OpenTimeout,ReceiveTimeout,CloseTimeout等。
另一个选择是将WCF托管在Windows服务中,这可能会简化您的情况,因为它从方程式中删除了IIS: http://msdn.microsoft.com/en-us/library/ms733069.aspx 或者,您考虑使用单向WCF调用怎么样?这样,发送请求后,调用将尽快返回给客户端。 需要一个对WCF服务进行异步调用的示例

是的,我正在尝试在Windows服务中托管WCF服务。我认为在这种情况下回调不合适,因为它是一个长时间运行的任务,用户不能期望等待如此长的时间来获取结果的通知。这是一个“发出请求就忘记”的调用,用户只需检查网络文件系统以查看报告是否已创建。最初,我反对使用Windows服务,因为安装和卸载很麻烦,所以我尝试使用IIS,但它会导致超时问题。 - RKP
在WCF中使用单向调用怎么样?https://dev59.com/znRA5IYBdhLWcg3w8SiJ - Larsbj

1
考虑创建一个使用 WF 的 WCF 工作流服务。这些服务专门设计用于处理长时间运行的进程,特别是如果您使用持久化功能。

谢谢回复。这不是一个工作流程,只是一个需要很长时间执行的任务,因此使用WF可能会过度设计。 - RKP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接