2012-05-30 166 views
0

背景:我们有一个服务安装在已经开始无法调用外部Web服务的远程站点上。据现场的网络\支持工程师没有代理应该是必需的,但试图执行的WebRequest返回一个异常时:WebRequest.Proxy - 什么是默认值

System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required. 

唯一的例外是相对不言自明的,但看代码,没有代理在对WebRequest的调用中指定,并且没有代理在app.config文件中定义。

参照MSDN文档WebRequest.Proxy:“该IWebProxy对象,以便代理请求的默认值是通过调用GlobalProxySelection.Select属性设置”

,然后提到了GlobalProxySelection.Select的文档:

“获取或设置全局HTTP代理。”

并且GlobalProxySelection.Select没有在应用程序的任何位置设置,默认值来自哪里?还有其他全局配置文件可以设置全局HTTP代理吗?

回答

0

您必须手动设置代理。如果您想使用默认系统代理,则可以通过执行以下操作来完成此操作。 (在Windows Internet设置)

myRequest.Proxy = WebRequest.GetSystemWebProxy();

你所得到的错误,因为您的网络阻止访问到服务器上,无需使用代理服务器。

+0

但关键是我根本不想使用代理。但是由于某种原因,它似乎默认为代理服务器,我无法找到它尝试使用代理服务器的位置或原因。 – mutex

+0

检查您的Windows网络设置,或者如果您在办公网络上,请咨询您的系统管理员。你所有的互联网连接都通过代理吗? – lahsrah

+0

系统管理员说有一个规则,以便对这个特定的Web服务的调用不需要代理;事实上,如果我关闭IE中的代理并浏览到Web服务,它会按预期加载。在C#服务中,在代码中没有设置代理,在app.config中没有设置代理,在machine.config中没有设置代理。所以我很困惑,为什么它试图使用代理。 – mutex

0

尽管这并不直接解决您的问题,我可以建议尝试在<system.net>在你的app.config/web.config中一个<defaultProxy />元素与useDefaultCredentials="true" - 这很可能让你的应用程序认证通过代理,因此不要求特殊的旁路规则。

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