VS2015/ASP.NETWebService:服务器端超时,连接中止



这个超时让我疯了,伙计们,我真的需要你们的帮助来理解它:

我得到了一个客户端,它是一个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上。。。。

最新更新