我有一个客户端服务器上运行的ASP.NET应用程序(W2k3,IIS6,.NET 2.0)。 FWIW,这是一个testing实例,它还没有被移入生产 。 所以它不在SSL下运行,负载平衡等。
当我从我们的办公室访问其服务器上的某个页面时,页面会被击中一次。 检查IIS日志(c:WINDOWS \ system32 \ LogFiles \ W3SVC1)显示该页面的GET,然后我按下页面上的button,日志文件显示POST。 这到目前为止似乎工作正常。
现在,当我远程进入客户端的networking并从其中一台本地机器访问页面时,日志文件显示GET,然后按下页面上的button,同时日志显示两个 POST。 第一个显示状态(sc-status,sc-substatus,sc-win32-status)200 0 64,第二个显示200 0 0。
在日志文件中,两个POST都是相同的。 基本上日志看起来像这样(除了我掩盖了一些数据):
#字段:date时间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 +(兼容; + 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 Mozilla / 4.0 +(兼容; + 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 Mozilla / 4.0 +(兼容; + 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的错误描述是:“指定的networking名称不再可用”。 这使我相信,鉴于两个POST请求都显示HTTP状态200,服务器成功提供请求,但客户端从未通知并重新提交请求。
我怎样才能解决这个问题?
任何想法只能在内部networking上导致这种行为?
我应该提到,这是发生在两个独立的客户端网站,但是在我们的其他六个客户站点,或者我们的办公室,或者通过networking连接到我们八个客户端中的任何一个都不会发生。
在他们的本地networking中,有100%的时间可以重现,但是其他地方的时间是0%?
更新:我发现很less的重复的POST请求有sc-win32-状态995而不是最初报告的64。 sc-win32-status = 995的错误描述是:“由于线程退出或应用程序请求,I / O操作已被中止。 这没有任何意义(考虑到我有完全访问代码)。 我仍然不明白这个问题是怎么发生的,为什么这个问题正在发生,但是新的错误代码让我相信它可能不是一个networking问题,我现在正在研究一个随机代码错误的可能性。
这是我迄今对这个问题的理解:
更新:我在这里和这里发现了一些有趣的信息,所以我基本上重新编写了页面,以确保没有任何坏的标记等等,现在问题已经消失了! 这只是黑暗中的一个镜头,我不能确定是什么原因解决了这个问题,因为这只是在一些非常特殊的情况下影响到我们的一些客户。
我尝试通过代理服务器从IIS6提供gzipped二进制文件时遇到同样的问题。 直接访问网站时我没有遇到任何问题。
我发现这是在我的情况下通过在客户机上运行Fiddler并检查响应的原因。 提琴手警告说,响应编码,然后抱怨gzip文件上的幻数不正确。
我closures了我的代码中的二进制文件的gzip压缩,并且问题停止发生。
我不是这方面的专家,但我遇到了类似的问题,只发生在使用IP地址而不是主机名。
也许这有点帮助…
垫。