我有一个WCF服务方法,执行时间超过两个小时(运行一些报告)。我怎样才能确保它不会超时而不管它花费的时间?我认为WCF配置中有很多超时设置,我不确定哪一个与我相关。对于ASMX webservices,有一个指定无限超时设置的选项,是否有类似的WCF?我是否还需要为此改变任何IIS设置(WCF服务在IIS中托管),如工作进程的回收,空闲超时等?
答案 0 :(得分:8)
这是滥用网络服务。不要这样做。
相反,让Web服务启动长时间运行的操作,在单独的进程中运行。如果客户需要知道报告何时完成,那么让“单独的流程”跟踪报告的创建,并在报告完成时记下。客户端可以调用Web服务来检查该状态。
您真的不希望依赖于持续打开数小时的HTTP连接。这是一个网络。事情发生在网络上。坏事。
答案 1 :(得分: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/
您还应该考虑客户端的超时。 (binding.OpenTimeout,ReceiveTimeout,CloseTimeout等)
另一个选择是在Windows服务中托管WCF,这可以简化您的情况,因为它从等式中删除IIS:
http://msdn.microsoft.com/en-us/library/ms733069.aspx
或者,使用单向WCF呼叫怎么样?这样,呼叫将在发送请求后立即返回到客户端。
答案 2 :(得分:1)
考虑改为创建WCF workflow service(使用WF)。它们专门用于处理长时间运行的进程,尤其是在使用持久性的情况下。