【发布时间】:2023-06-21 12:02:02
【问题描述】:
我有一个 WCF 服务方法,它需要两个多小时才能执行(运行一些报告)。无论花费多少时间,我如何确保它不会超时?我认为 WCF 配置中有很多超时设置,我不确定哪一个与我相关。对于 ASMX webservices,有一个选项可以指定无限超时设置,WCF 是否有类似的设置?我是否还需要为此更改任何 IIS 设置(WCF 服务托管在 IIS 中),例如回收工作进程、空闲超时等?
【问题讨论】:
我有一个 WCF 服务方法,它需要两个多小时才能执行(运行一些报告)。无论花费多少时间,我如何确保它不会超时?我认为 WCF 配置中有很多超时设置,我不确定哪一个与我相关。对于 ASMX webservices,有一个选项可以指定无限超时设置,WCF 是否有类似的设置?我是否还需要为此更改任何 IIS 设置(WCF 服务托管在 IIS 中),例如回收工作进程、空闲超时等?
【问题讨论】:
这是对网络服务的滥用。不要这样做。
相反,让 Web 服务启动长时间运行的操作,在单独的进程中运行。如果客户需要知道报告何时完成,则让“单独的过程”跟踪报告的创建,并在报告完成时记录下来。客户端可以调用 Web 服务来检查该状态。
您真的不希望依赖 HTTP 连接保持打开数小时。这是一个网络。事情发生在网络上。坏事。
【讨论】:
您是否考虑过使用回调?您的客户端发送一个请求,然后等待来自服务器的通知何时完成?这可能需要对客户端进行更改,但这样一来,您的服务就可以“敲响链条”并在报告完成时告诉客户端。
求助: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/
您还应该考虑客户端的超时。 (binding.OpenTimeout、ReceiveTimeout、CloseTimeout 等)
另一种选择是将 WCF 托管在 Windows 服务中,这可以简化您的情况,因为它从等式中删除了 IIS:
http://msdn.microsoft.com/en-us/library/ms733069.aspx
或者,使用单向 WCF 调用怎么样?这样,调用将在发送请求后尽快返回给客户端。
【讨论】:
考虑改为创建一个WCF workflow service(使用 WF)。这些是专门为处理长时间运行的进程而设计的,尤其是在您使用持久性的情况下。
【讨论】: