【发布时间】:2016-06-08 18:07:19
【问题描述】:
这个超时让我发疯了,我真的需要你的帮助来理解它:
我有一个客户端,它是一个 python/WSGI/flask 应用程序(在 Tornado 服务器上),它使用 lib requests 在我的服务器中调用 Web 服务,一个 ASP.NET 网站项目(在 VS2015 iisexpress 上运行) .exe 暂时)。
Web 服务仅使用 .svc 文件和带有 [ServiceContract] 和 [OperationContract] 注释的 C# 类进行声明,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 服务器到带有[FIN,ACK] 的 python 应用程序的 TCP 调用),但 .NET 代码仍在正常运行,尚未完成。
我的 WebService 执行在连接中止 1 分钟后完成,因此当服务器决定切断连接时,它不会等待或停止执行。
在那里我开始尝试很多解决方案,但都没有奏效:更改 <httpRuntime executionTimeout>(并在 debug=false 上编译),在 WebService 文件夹中创建一个不同的 web.config 以设置此 @987654331 @,添加一个basicHttpBinding 部分来设置SendTimeout,在python requests 调用上设置Timeout=None... 2 分钟超时没有任何改变。
真的是 IIS/ASP.NET 造成了这个超时吗?有没有办法改变它?我做错了什么?
【问题讨论】:
标签: asp.net web-services wcf iis-express