1

我有一个调用外部 Web 服务的 ASP.NET 4.5 Web 应用程序。该环境需要通过经过身份验证的代理服务器访问 Internet。

在我的开发 PC (Win7) 上,以下配置工作正常。

<system.net>
  <defaultProxy useDefaultCredentials="true" enabled="true">
    <proxy usesystemdefault="True" autoDetect="True" />
  </defaultProxy>
</system.net>

上述配置在应用于测试服务器时不起作用。测试服务器是带有 IIS 7 的 Windows Server 2008。我已将 App Pool 身份设置为我的用户凭据,以便使用我的凭据对代理服务器进行身份验证。

如果我创建IWebProxy.

public class ManualProxy : IWebProxy
{
    private readonly Uri _proxy;
    private static readonly NameValueCollection AppSettings = ConfigurationManager.AppSettings;

    public ManualProxy()
    {
        _proxy = new Uri(AppSettings["ManualProxy.Proxy"]);
    }


    #region IWebProxy

    ICredentials IWebProxy.Credentials
    {
        get
        {
            return new NetworkCredential(AppSettings["ManualProxy.Username"], AppSettings["ManualProxy.Password"]);
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    Uri IWebProxy.GetProxy(Uri destination)
    {
        return _proxy;
    }

    bool IWebProxy.IsBypassed(Uri host)
    {
        return false;
    }

    #endregion
}

配置。

<defaultProxy useDefaultCredentials="false" enabled="true">
  <module type="MyNamespace.ManualProxy, MyAssembly"/>
</defaultProxy>

自定义代理配置为使用我的凭据进行身份验证,这些凭据与我的开发 PC 和 IIS 应用程序池身份的凭据相同。

理想情况下,我不需要自定义代理。如何仅使用 web.config 中的现有选项正确配置代理服务器?

有什么我做的不对吗?

4

1 回答 1

3

强制代理地址而不是依靠自动检测解决了这个问题。

  <system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy usesystemdefault="False" autoDetect="False" proxyaddress="http://proxy:8080" />
    </defaultProxy>
  </system.net>
于 2013-10-23T21:18:48.990 回答