VS2015/ASP.NET WebService:服务器端超时,连接中止
VS2015/ASP.NET WebService: Server-side timeout, Connection aborted
这个超时让我发疯了伙计们,我真的需要你的帮助来理解它:
我有一个客户端,它是一个 python/WSGI/flask 应用程序(在 Tornado 服务器上),它使用库 requests
调用我的服务器中的 Web 服务,一个 ASP.NET 网站项目(运行 目前在 VS2015 iisexpress.exe 上)。
Web 服务仅使用 .svc 文件和带有 [ServiceContract]
和 [OperationContract]
注释的 C# class 声明,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 应用 [FIN,ACK]
),但 .NET 代码仍然是 运行 正常,它还没有完成。
我的 WebService 执行在连接中止 1 分钟后完成,因此当服务器决定切断连接时,它不会等待或停止执行。
然后我开始尝试很多解决方案,其中 none 已经奏效:更改 <httpRuntime executionTimeout>
(并在 debug=false
上编译),创建一个不同的 web.config
在WebService文件夹中设置这个executionTimeout
,添加一个basicHttpBinding
部分来设置SendTimeout
,在python requests
上设置Timeout=None
呼叫... 2 分钟超时没有任何改变。
真的是IIS/ASP.NET 做这个超时?无论如何要改变它吗?我做错了什么?
我在生产服务器 (IIS8) 上尝试了我的长时间执行......而且它有效!没有任何超时设置!
这种不可编辑的服务器端超时似乎只存在于 VS2015 IIS Express 上....
这个超时让我发疯了伙计们,我真的需要你的帮助来理解它:
我有一个客户端,它是一个 python/WSGI/flask 应用程序(在 Tornado 服务器上),它使用库 requests
调用我的服务器中的 Web 服务,一个 ASP.NET 网站项目(运行 目前在 VS2015 iisexpress.exe 上)。
Web 服务仅使用 .svc 文件和带有 [ServiceContract]
和 [OperationContract]
注释的 C# class 声明,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 应用 [FIN,ACK]
),但 .NET 代码仍然是 运行 正常,它还没有完成。
我的 WebService 执行在连接中止 1 分钟后完成,因此当服务器决定切断连接时,它不会等待或停止执行。
然后我开始尝试很多解决方案,其中 none 已经奏效:更改 <httpRuntime executionTimeout>
(并在 debug=false
上编译),创建一个不同的 web.config
在WebService文件夹中设置这个executionTimeout
,添加一个basicHttpBinding
部分来设置SendTimeout
,在python requests
上设置Timeout=None
呼叫... 2 分钟超时没有任何改变。
真的是IIS/ASP.NET 做这个超时?无论如何要改变它吗?我做错了什么?
我在生产服务器 (IIS8) 上尝试了我的长时间执行......而且它有效!没有任何超时设置! 这种不可编辑的服务器端超时似乎只存在于 VS2015 IIS Express 上....