【问题标题】:407 Proxy Authentication Required407 需要代理身份验证
【发布时间】:2009-10-06 09:35:36
【问题描述】:

我在一个网站上工作,我正在使用以下代码从外部 URL 检索 XML 数据

WebRequest req = WebRequest.Create("External server url");
req.Proxy = new System.Net.WebProxy("proxyUrl:8080", true);
req.Proxy.Credentials = CredentialCache.DefaultCredentials;
WebResponse resp = req.GetResponse();
StreamReader textReader = new StreamReader(resp.GetResponseStream());
XmlTextReader xmlReader = new XmlTextReader(textReader);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlReader);

此代码在我的开发 PC 上运行良好(带有 .Net 3.5 的 Windows XP)

但是当我将此代码部署到 IIS(在 Windows XP 和 Windows Server 2003 上)时,它给了我以下错误

“远程服务器返回错误:(407) 需要代理身份验证。”

有时它会给我

“远程服务器返回错误:(502) Bad Gateway。”

以下代码来自我的 web.config

<system.net>
    <defaultProxy>
      <proxy  usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" />
    </defaultProxy>
  </system.net> 

请帮帮我?

[编辑] 即使我为开发 PC 运行该网站,但通过 IIS 它给我错误“远程服务器返回错误:(407) 需要代理身份验证。”

但是当我从 Microsoft Devlopment 服务器运行网站时,它运行良好

【问题讨论】:

    标签: asp.net proxy


    【解决方案1】:

    @Mohit Agarwal

    非常感谢您建议添加“useDefaultCredentials="true"”,您是明星!

    我一直试图让 Google Data API 示例 exe 的 .NET 库运行数周,但没有成功。添加您的建议解决了我的问题,我现在得到了一个连接,而不是 407 Proxy Authentication Required。

    speadsheet.exe.config 内容需为:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.net>
        <defaultProxy useDefaultCredentials="true">
          <proxy usesystemdefault="true"/>
        </defaultProxy>
      </system.net>
    </configuration>
    

    就我而言,不像 Google 建议的那样:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <system.net>
      <defaultProxy>
       <proxy usesystemdefault="true"/>
      </defaultProxy>
     </system.net>
    </configuration>
    

    http://code.google.com/p/google-gdata/wiki/WebProxySetup

    【讨论】:

      【解决方案2】:

      对于那些通过 Google 找到此内容的人可能会有所帮助,您实际上可以将其用于可能还没有自己的 AppName.exe.config 文件的 .NET 应用程序(或者如果有,您可以对其进行修改)。我们使用 NextGen EPM(医疗调度/计费),他们的信用卡处理系统一直卡在我们的代理服务器上,因为它无法通过凭据。我制作了一个包含上述 sn-p 的 EXEName.config 文件(在本例中为 NextGenEPM.exe.config):

      <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
        <system.net>
          <defaultProxy useDefaultCredentials="true">
            <proxy usesystemdefault="true"/>
          </defaultProxy>
        </system.net>
      </configuration>
      

      成功!这使我能够解决问题,而无需在我们的代理服务器中乱七八糟,该服务器被严格配置为需要身份验证,我们宁愿不妥协。

      【讨论】:

        【解决方案3】:

        将web.config中的sn-p改为:

        <system.net>
            <defaultProxy useDefaultCredentials="true">
              <proxy  usesystemdefault="False" proxyaddress ="http://172.16.12.12:8080" bypassonlocal ="True" />
            </defaultProxy>
        </system.net>
        

        【讨论】:

        • @Mohit,我已经在写 CredentialCache.DefaultCredentials;在源代码中,所以我认为它没有什么区别?
        【解决方案4】:

        这可能是由于运行 IIS 的帐户没有通过身份验证代理的适当权限造成的。

        当您在开发 PC 上运行它时,您是以登录身份运行它,我假设它具有通过代理的权限。在 IIS 中运行时,它没有像您一样运行,因此可能无法通过代理。

        您可以授予 IIS 用户通过代理的权限(这不太可能在域环境中工作,因为 IIS 用户将是机器的本地用户),或者将您的应用程序配置为作为网络用户运行具有通过代理的权限。

        这可以通过让 IIS 以域用户身份运行(我不推荐这种方法)或通过使用 web.config 将应用程序配置为以域用户身份运行来完成(有关更多信息,请参阅this 文章有关如何执行此操作的信息)。

        【讨论】:

          【解决方案5】:

          app.configWeb.config 中的根&lt;configuration&gt; 元素下方:

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

          【讨论】:

            【解决方案6】:

            如果你想指定代理详细信息,试试这个

            <?xml version="1.0" encoding="utf-8" ?>
                 <configuration>
                      <system.net>
                          <defaultProxy enabled="true" useDefaultCredentials="true">
                            <proxy proxyaddress="http://<ProxyServer>:<port>" 
                                   usesystemdefault="False" 
                                   bypassonlocal="True" 
                                   autoDetect="False" />
                          </defaultProxy>
                      </system.net>
            </configuration>
            

            干杯!

            【讨论】:

              【解决方案7】:

              我们花了很长时间来解决这个问题,并更新了我们的 app.config 以使用上面答案中指定的默认凭据。 但是,它仍然没有工作! 在经历了很多痛苦之后,我们发现我们的 app.config 没有自动包含在我们的 click once 应用程序中。 一个简单的错误导致极端的头部破坏!!!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-10-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多