我有一个在客户端服务器(W2k3,IIS6,.NET 2.0)上运行的ASP.NET应用程序。FWIW,这是一个Test实例,尚未移入生产环境。因此它不在SSL,负载平衡等环境下运行。
当我从我们的办公室访问其服务器上的页面之一时,该页面就会被点击一次。检查IIS日志(c:WINDOWS \ system32 \ LogFiles \ W3SVC1)显示该页面的GET,然后按一下页面上的按钮,日志文件显示POST。到目前为止,这似乎运行良好。
现在,当我远程访问客户端的网络并从其本地计算机之一访问页面时,日志文件显示GET,然后按页面上的按钮,日志同时显示两个 POST。第一个显示状态(sc状态,sc子状态,sc-win32状态)200 0 64,第二个显示200 0 0。
在日志文件中,两个POST是相同的。基本上,日志看起来像这样(除了我屏蔽了一些数据):
#fields:日期时间s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent)sc-status sc-substatus sc-win32-status 2009-08-11 20:19:32 xxxx GET /File.aspx-80-yyyy Mozilla / 4.0 +(compatible; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +。NET + CLR + 3.5.21022; +。NET + CLR + 3.5.30729; +。NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0)200 0 0 2009-08-11 20:19:45 xxxx POST /File.aspx-80-yyyy Mozilla / 4.0 +(compatible; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +。NET + CLR + 3.5.21022; +。NET + CLR + 3.5.30729; +。NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0)200 0 64 2009-08-11 20:19:45 xxxx POST /File.aspx-80-yyyy Mozilla / 4.0 +(compatible; + MSIE + 8.0; + Windows + NT + 6.0; + WOW64; + Trident / 4.0; + SLCC1; + .NET + CLR + 2.0.50727; +。NET + CLR + 3.5.21022; +。NET + CLR + 3.5.30729; +。NET + CLR + 3.0.30618; + MDDR; + OfficeLiveConnector.1.4; + OfficeLivePatch .0.0)200 0 0
问题是,页面被击中了两次。数据库对第一个请求执行操作,然后第二个请求检测到正在执行重复操作,并引发错误消息。用户认为他们的操作失败了,但实际上成功了。
sc-win32-status 64的错误描述是:“指定的网络名称不再可用。” 鉴于两个POST请求都显示HTTP状态200,这使我相信服务器可以成功处理该请求,但是永远不会通知客户端并重新提交该请求。
我该如何解决?
有什么想法可能仅导致其内部网络上的此行为?
我应该提到,这是在两个单独的客户端站点上发生的,但是在我们其他六个客户端站点上或在我们的办公室中,或者在通过网络连接到我们八个客户端中的任何一个时都不会发生。
是什么使得这种100%的时间在其本地网络上可复制但在其他任何地方的0%的时间可复制?
更新:我发现很少的重复POST请求的sc-win32状态为995,而不是最初报告的64。sc-win32-status = 995的错误描述是:“由于线程退出或应用程序请求,I / O操作已中止。” 这没有任何意义(考虑到我可以完全访问该代码)。我仍然不了解此问题的发生方式或原因,但是新的错误代码使我相信这毕竟可能不是网络问题,现在我正在研究随机代码错误的可能性。