在零星的情况下,当我们尝试从.Net客户端应用程序调用一个.asmx web服务时,我们收到以下错误:
“底层连接已closures:服务器closures了预期保持连接状态的连接无法从传输连接读取数据:现有连接被远程主机强制closures。
零星的意思是说,对于一些用户来说,可能会每隔几天发生一次,或者每天发生六次。 用户的第一个Web服务调用永远不会发生。 随后的(通常是相同的)呼叫将在故障之后立即起作用。 失败发生在服务中的各种方法,通常发生在15-20秒(根据日志)从请求的时间。
在IIS站点日志中查看特定的调用将显示以下窗口中的一个或另一个错误代码:
121:信号灯超时时间已过。
1236:networking连接被本地系统中止。
一些额外的环境细节:
在由Windows Server 2008操作系统上运行IIS7的两台服务器组成的内部networkingWeb场上运行。 在Windows Server 2003上运行的三台服务器的旧IIS6 Web场中运行时(以及我们在开发和临时环境中使用单个IIS6 / 2003实例时没有问题),不会发生这些问题。 编辑:此外,所有这些服务器实例是VMWare虚拟机,不知道如果这是一个惊喜了或不。
Web服务是一个.Net 2.0 / 3.5编译的.asmx Web服务,它有自己的应用程序池(.Net 2.0,集成pipe道)。 只启用Windows身份validation。
我们在服务器场上使用了与主服务相同的物理path的另一个Web服务,唯一的区别是启用了基本身份validation。 这用于我们ERP系统的一部分。 尝试使用相同和不同的应用程序池 – 对错误没有影响。 这个网站不像主站点那么频繁,并且从来没有错误。
如前所述,错误只会发生在.Net客户端而不是其他应用程序中。 客户端应用程序始终为每个请求创build一个新的Web服务对象,并将服务凭证设置为System.Net.CredentialCache.DefaultCredentials。
该应用程序要么本地部署到客户端,要么在Citrix服务器会话中运行。 那些在Citrix上运行的用户似乎没有遇到这个问题,只有本地部署的客户端。 Citrix服务器和Web场位于相同的物理位置,并位于相同的IP范围(10.67.xx.xx)中。 遇到错误的本地部署客户端位于其他位置(10.105.xx.xx,10.31.xx.xx)。
我已经检查了操作系统日志,看看是否可以看到任何问题,但没有真正的突出。
编辑:其实,我自己刚刚遇到了一点点的错误。 我决定再次检查日志,看到在“相同”时间(IIS日志条目1:39:59,事件日志条目1:39:50)有一个安全日志条目“审计失败”。 不知道这是否巧合,我将不得不查看以前的错误的日志。 我很可能抓住吸pipe,但细节:
日志名称:安全来源:Microsoft-Windows安全审核date:7/8/2009 1:39:50 PM事件ID:5159任务类别:筛选平台连接级别:信息关键字:审核失败用户:不适用计算机: is071019。<******> .net说明:Windows过滤平台已阻止对本地端口的绑定。
应用程序信息:进程ID:1260应用程序名称:\ device \ harddiskvolume1 \ windows \ system32 \ svchost.exe
networking信息:源地址:0.0.0.0源端口:54802协议:17
filter信息:filter运行时间ID:0层名称:资源分配层运行时间ID:36
我也试过在IIS7中使用失败的请求追踪,但是服务调用永远不会到达FRT可以捕获到的地方(即使失败logging在Web服务日志中)。
networking基础设施组织说,他们检出了DNS,并且任何NIC设置都是正确的,所以没有“扑动”。 一切都消失了 我不确定他们是否签出了任何域控制器服务器,但看看是否可能是一个问题。
有任何想法吗? 或者其他任何debugging策略来达到这个底部? 我只是负责这个软件的开发人员,并不知道从networking的angular度来研究什么 – 尽pipe这听起来像是一个networking问题,基于正在发生的事情。
在此先感谢您的帮助。
当发生错误时,您可以创build一个失败的页面(try catch),然后使用WCAT模拟各种负载情况。 希望那么你可以看到一个模式,或者至less看看它是否与负载有关。 否则,我会在.Net客户端中创build一些东西来捕获这个问题,并简单地重试请求,所以对用户是透明的。
您是否需要启用Windows过滤平台? 如果允许禁用它,那应该避免这个审计错误; 如果您必须启用它,也许他们可以例外,让您禁用审计类别 – 请参阅: http : //msdn.microsoft.com/en-us/library/bb309058(VS.85).aspx
如果您被要求离开WFP并保持原样,这将无济于事。
我也只在生产环境中遇到同样的零星情况。 我发现但尚未validation的一些build议是将Http Keep-Alive在服务器上closures,或者在Web请求中将其closures。 请参阅http://support.microsoft.com/kb/819450
我打算在testing环境中testing这个。