这个超时让我疯狂,我真的需要你的帮助来理解它:
我有一个客户端,它是一个python / WSGI / flask应用程序(在Tornado服务器上),使用lib requests
来调用我的服务器中的Web服务,一个ASP.NET网站项目(运行于现在是VS2015 iisexpress.exe。
简单地使用.svc文件和带有[ServiceContract]
和[OperationContract]
注释的C#类声明Web服务,而web.config
中没有关于此WebService的内容。
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GestionCand
{
...
[WebInvoke(Method = "POST", UriTemplate = "cand/listByPk", RequestFormat = WebMessageFormat.Json)]
[OperationContract]
public Message GetbyPkList(String listPk)
{
...
一切运行良好,直到我尝试处理需要3到4分钟的请求(一个包含数千个条目的长映射循环)。 调用有效,但是2分钟后,当我的.NET Web服务仍在循环中时(所以没有错误,在它到达代码结束之前),我的python应用程序说:
File "/Mis/lib/python2.7/site-packages/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
ConnectionError: ('Connection aborted.', BadStatusLine("''",))
我不确定那个错误,但经过一些搜索,这意味着服务器决定停止连接,这就是我在wireshark上看到的内容(从ASP.NET服务器到python app的TCP调用)使用[FIN,ACK]
),但.NET代码仍然正常运行,它还没有完成。
连接中止后,我的WebService执行完成1分钟,因此当服务器决定切断连接时,它不会等待或停止执行。
在那里我开始尝试很多解决方案而且没有一个有效:更改<httpRuntime executionTimeout>
(和debug=false
上的编译),在WebService中创建不同的web.config
要设置此executionTimeout
的文件夹,请添加basicHttpBinding
部分以设置SendTimeout
,在Timeout=None
调用上设置requests
...没有任何更改2分钟超时。
真的是IIS / ASP.NET执行此超时吗?反正有改变吗?我做错了什么?
答案 0 :(得分:0)
我在生产服务器(IIS8)上尝试了我的长时间执行....它的工作原理!没有任何超时设置! 这个不可编辑的服务器端超时似乎只存在于VS2015 IIS Express ....