6 networking iis-7 .net web-server authentication
在尝试从 .Net 客户端应用程序调用 .asmx Web 服务时,我们偶尔会收到以下错误:
“底层连接已关闭:服务器关闭了预期保持活动状态的连接。无法从传输连接读取数据:远程主机强行关闭了现有连接。”
我所说的零星是指它可能发生零次,每隔几天发生一次,或者对于某些用户来说每天发生六次。它永远不会发生在用户的第一次 Web 服务调用中。并且随后的(通常是相同的)调用将始终在失败后立即工作。失败发生在服务中的各种方法中,通常发生在从请求时间起 15-20 秒(根据日志)之间。
查看特定调用的 IIS 站点日志将显示以下 Windows 错误代码之一:
121:信号量超时时间已过。
1236:网络连接被本地系统中止。
一些额外的环境细节:
在由两台在 Windows Server 2008 操作系统上运行 IIS7 的服务器组成的内部网络 Web 场上运行。在 Windows Server 2003 上运行的由三台服务器组成的较旧的 IIS6 Web 场中运行时不会出现这些问题(我们使用单个 IIS6/2003 实例用于我们的开发和暂存环境,没有任何问题)。编辑:此外,所有这些服务器实例都是 VMWare 虚拟机,不确定这是否是一个惊喜。
Web 服务是一个 .Net 2.0/3.5 编译的 .asmx Web 服务,它有自己的应用程序池(.Net 2.0,集成管道)。仅启用了 Windows 身份验证。
我们在场上有另一个 Web 服务,它使用与主要服务相同的物理路径,唯一的区别是启用了基本身份验证。这用于我们 ERP 系统的一部分。已尝试使用相同和不同的应用程序池 - 对错误没有影响。此站点不像主站点那样经常被访问,并且从未出现过错误。
如前所述,错误只会在从 .Net 客户端调用时发生 - 而不是从其他应用程序调用。客户端应用程序始终为每个请求创建一个新的 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)。不确定这是否是巧合,我必须查看以前的错误日志。我可能正在抓住吸管,但细节:
日志名称:安全来源:Microsoft-Windows-Security-Auditing 日期:7/8/2009 1:39:50 PM 事件 ID:5159 任务类别:过滤平台连接级别:信息关键字:审核失败用户:不适用计算机: is071019.<******>.net 描述:Windows 过滤平台已阻止绑定到本地端口。
应用程序信息:进程 ID:1260 应用程序名称:\device\harddiskvolume1\windows\system32\svchost.exe
网络信息:源地址:0.0.0.0 源端口:54802 协议:17
过滤器信息:过滤器运行时 ID:0 层名称:资源分配层运行时 ID:36
我还尝试在 IIS7 中使用失败请求跟踪,但服务调用从未真正到达 FRT 可以捕获它的位置(即使失败记录在 Web 服务日志中)。
网络基础设施小组表示,他们检查了 DNS,所有 NIC 设置都是正确的,因此没有“抖动”。一切顺利。我不确定他们是否检查了任何域控制器服务器,但看看这是否可能是一个问题。
有任何想法吗?或者任何其他调试策略来深入了解这个问题?我只是负责软件的开发人员,并没有真正了解从网络方面进行调查的内容 - 尽管根据正在发生的事情对我来说听起来确实是网络问题。
在此先感谢您的帮助。
您可以创建一个页面,该页面在发生错误时会失败(尝试捕获),然后使用 WCAT 模拟各种负载条件。希望您能看到一种模式,或者至少看看它是否与负载相关。否则,我会在 .Net 客户端中构建一些内容来捕获此问题并简单地重试请求,因此它对用户来说是透明的。