2016-07-28 121 views
1

我有一个外部托管网站和一个托管在本地网络上的ASP.NET(Framework 4.5.2)Web API 2。外部网站通过单击API按钮发出GET请求,该API查询MSSQL数据库并返回JSON以在页面上显示数据。该Web API目前托管在运行IIS 10的Windows 10框中。Web API 2和IIS 10 - 偶发性ERR_CONNECTION_RESET

我已经通过NuGet控制台安装了Miscrosoft.AspNet.Cors包,并通过将此代码片段添加到Web.config文件中来启用CORS:

<add name="Access-Control-Allow-Origin" value="*" /> 

除了这段程式WebApiConfig.cs:

config.EnableCors();  

网站完美的作品时,我的Web API托管在同一网络上。我在外部网络上遇到问题。偶尔,我收到ERR_CONN_RESET(Chrome)和“网络连接丢失”(Safari)。当我打开新的浏览器并导航到该网站时,该错误似乎更频繁地发生。点击几下按钮后,错误停止并且页面正常工作。如果我直接导​​航到web api端点,则会遇到类似的行为。 错误是零星的,这使得这个问题非常难以排除故障。 FailedRequest跟踪不会创建日志,因为请求没有将其发送到服务器。在IIS中,我尝试将应用程序池的启动模式更改为“始终运行”,并且也没有任何运气就启用了32位应用程序。 有什么可以导致这个问题的想法?在什么时候我可以排除我的代码,CORS配置和IIS配置?我倾向于这是一个网络问题,但我们的网络管理员确信问题在我的最终。任何帮助将不胜感激。这个问题已经吃光了整个星期,我即将把我的头发拉出来!

+1

看起来不像CORS错误,因为通常CORS错误会建议启用CORS或从同一个域进行调用。如果您确定请求未达到IIS,则可以检查http.sys日志(C:\ Windows \ System32 \ LogFiles \ HTTPERR)并根据说明检查https://support.microsoft.com/en-in/kb/820729。也可能是网络错误,如防火墙阻止。你在小提琴的痕迹中看到了什么? –

+0

执行一个提琴手跟踪并获得504错误,指示CORS头被从HTTP头中剥离。这可能是由防火墙造成的吗? – user2486993

+0

您可以添加完整的提琴手痕迹在这里,即请求和响应 –

回答

2

最后,这最终成为防火墙问题。我最终取代了过时的sonicwall 2400,问题就消失了。追查是非常困难的,因为防火墙“无声无息”地丢弃了没有任何日志记录的数据包。正如我所建议的,我在防火墙,数据库和应用程序服务器上运行一个跟踪,以确定数据包被丢弃。

我怀疑由有状态防火墙设置引起的问题,因为已知sonicwall丢弃没有任何日志的问题数据包。

感谢您的帮助。希望这篇文章能够帮助别人。

2

你绝对可以排除你的代码,CORS配置和IIS配置。根据错误代码,您的服务器似乎没有间歇性响应,或者可能是中间设备/代理/防火墙阻止请求并因此超时。

由于您的网络管理员排除了问题,由于你可以尝试主持的WebAPI(没有这些会让你快乐的)

1)检查HTTP.SYS日志(在机器上几件事情中间设备C:\ Windows \ System32 \ LogFiles \ HTTPERR)并根据此处的描述检查https://support.microsoft.com/en-in/kb/820729

2)尝试彻底禁用防火墙。进入命令提示符(管理模式),并运行

NetSh Advfirewall set allprofiles state off 

3)如果第2步没有帮助,去运行 - >输入msconfig - >服务 - >隐藏所有Microsoft服务 - >全部禁用 - >重新启动和尝试。

如果没有任何工作可以同时从服务器和客户端获取网络跟踪信息,并且您的网络管理员可以找出正在发生的事情。