这个超时让我疯了,伙计们,我真的需要你们的帮助来理解它:
我得到了一个客户端,它是一个python/WSGI/flack应用程序(在Tornado服务器上),使用librequests
调用我的服务器中的web服务,一个ASP.NET网站项目(目前运行在VS2015 iisexpress.exe上)。
web服务只是用一个.svc文件和一个带有[ServiceContract]
和[OperationContract]
注释的C#类声明的,而在web.config
中没有任何关于此web服务的内容。
[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服务器到带有[FIN,ACK]
的python应用程序的TCP调用)上看到的,但.NET代码仍在正常运行,尚未完成。我的WebService执行在连接中止后1分钟结束,所以当服务器决定切断连接时,它不会等待或停止执行。
在那里,我开始尝试很多解决方案,但都没有成功:更改<httpRuntime executionTimeout>
(以及在debug=false
上编译),在WebService文件夹中创建一个不同的web.config
来设置这个executionTimeout
,添加一个basicHttpBinding
部分来设置SendTimeout
,在pythonrequests
调用上设置Timeout=None
。。。2分钟的超时时间没有任何改变。
真的是IIS/ASP.NET超时了吗?有什么可以改变的吗?我做错了什么?
我在生产服务器(IIS8)上尝试了长时间执行。。。。它起作用了!没有任何超时设置!此不可编辑的服务器端超时似乎仅存在于VS2015 IIS Express上。。。。