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 上....