在localhost上获取“远程服务器无法解析”不会被defaultProxy修复?

时间:2009-11-22 22:39:58

标签: c# asp.net system.net defaultproxy

这里是情况,我在家里的机器上测试我的localhost(没有代理服务器和Windows默认防火墙)并检索api.flickr.com xml文件,当我来上班时(使用ISA服务器来我得到“远程服务器无法解析”,所以我将这些行添加到web.config

<system.net>
  <defaultProxy>
   <proxy
    usesystemdefault="False"
    proxyaddress="http://localhost"
    bypassonlocal="True"
     />
   <bypasslist>
    <add address="[a-z]+\.flickr\.com\.+" />
   </bypasslist>

  </defaultProxy>
 </system.net>

返回: System.Net.WebException:远程服务器返回错误:(404)Not Found 。 什么地方出了错?感谢

2 个答案:

答案 0 :(得分:4)

这里有两种可能的情况:

1:如果您正在构建客户端应用程序(例如Console或WinForms)并且想要使用WebClient或HttpWebRequest访问http://localhost而没有任何干预代理,那么bypassonlocal="True"应该完成此任务。换句话说,您的app.config应如下所示:

<defaultProxy>
   <proxy
    usesystemdefault="False"
    bypassonlocal="True"
     />
  </defaultProxy>
 </system.net>

2:但是,如果你试图让你的ASP.NET应用程序(在http://localhost上运行)能够使用代理或没有代理正确解析URI,那么你需要在web.config中正确设置代理信息(或在machine.config中设置,这样您就不必更改应用程序的web.config),因此ASP.NET将知道您正在运行代理或未运行代理。像这样:

主页:

<defaultProxy>
   <proxy
    usesystemdefault="False"
    bypassonlocal="True"
     />
  </defaultProxy>
 </system.net>

工作:

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

也可以使用代理自动检测,从注册表中获取设置等,但我总是回避那些服务器应用程序的方法......太脆弱了。

顺便说一句,如果你发现事情配置正确,但你仍然得到错误,我建议的第一件事是编写一个快速测试,在你的WebClient / HttpWebRequest调用之前手动设置代理,而不是依赖在配置上做到这一点。像这样:

WebProxy proxyObject = new WebProxy("http://proxyserver:80/",true);
WebClient wc = new WebClient();
wc.Proxy = proxyObject;
string s = wc.DownloadString ("http://www.google.com");

如果请求即使在您使用代码时也没有正确地通过您的工作代理,即使在您的代码中正确配置了代理,代理本身也可能是问题所在。

答案 1 :(得分:0)

WebClient 中从本地下载数据没有问题,但从互联网下载是有问题的,所以配置以下

在您的Web.config中添加以下行并替换 Intenet代理地址端口

<system.net>
    <defaultProxy useDefaultCredentials="true" enabled="true">
      <proxy usesystemdefault="False" proxyaddress="http://your proxy address:port" bypassonlocal="True" />
    </defaultProxy>
    <settings>
      <servicePointManager expect100Continue="false" />
    </settings>   </system.net>

现在您的程序逻辑用于从互联网和公共URL下载内容。