web.config 中的 System.Net defaultProxy 部分

4 asp.net iis-6 web-services web-config .net-2.0

我在我们的实时平台上看到一个非常奇怪的问题,该平台由四个 Web 服务器 Windows Server 2003 机器组成,它们位于 ISA 服务器集群后面的集群中。它们都运行 IIS 6。我们需要从 .Net 2.0 webapp 向外界发出 webservice 请求,因此我们利用“defaultProxy”配置部分为传出请求指定代理,如下所示:

<system.net>
  <defaultProxy>
    <proxy proxyaddress="http://cache.mydomain.co.uk:8080" 
           bypassonlocal="true" />
    <bypasslist>
      <add address="monkey.mydomain.com" />
      <add address="www.mydomain.com" />
      <add address="192.168.0.1" />
    </bypasslist>
  </defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)

如您所见,我们还指定了一个绕过列表,以便我们的 web 应用程序中的 web 服务调用不会通过代理来调用同一服务器上的不同网站。

这在我们的实时系统上大部分时间都有效,但是随着系统负载过重,应该绕过代理的 web 服务请求突然开始通过代理路由,并将保持这种方式,直到应用程序池回收完成. 在这一点上,它回到它应该如何工作。这发生在所有四台服务器上;一般在几分钟之内。

我已经输出了在 webservice 调用期间使用的代理设置,当一切正常并且本地 webservice url 的 'bypassed' 属性为 'true' 时,我可以看到绕过列表。但是,当它出错时,我再也看不到绕过列表,并且绕过的属性为“假”。proxyaddress 属性始终保持不变。

不确定这是否是一种症状,但唯一的另一个非常奇怪的事情是,当它正常工作时,代理对象可以转换回 WebProxyWrapper 类,但是,当它停止工作时,它可以转换回 WebProxy 类.

有没有其他人遇到过这个问题,或者有没有人知道为什么会发生这种情况?

dev*_*uff 5

嗯,听起来像是重新加载配置时的内存压力或竞争条件。

您是否在这些机器上使用 Windows、IIS 和 .NET 框架的最新补丁?我知道 Microsoft 补丁有时会包含 KB 列表中未列出的小修复。

我建议升级到 Windows Server 2003 R2、.NET Framework v3.5 SP1 以及后续的安全补丁,因为这种配置可能会接受最多的测试。