.NET 中配置应用通过代理上网

2014-06-13 21:06 by Elliot

最近在用C#做一个桌面应用, 需要连接web service.
由于客户的网络环境是在一个HTTP代理后面, 所以应用要能通过代理连接互联网.

在测试的过程中发现一个很奇怪的地方, 就是如果我在IE中设置了代理服务器, 而在应用中如果没设置代理服务器的话, 即便我的电脑不需要通过代理服务器就可以联网, 那我的应用也无法连接互联网. 会返回407未认证的异常(我的代理服务器是需要用户名密码验证的).

看起来似乎是我的应用默认就会去读取IE设置的代理服务器信息而访问代理服务器一样.

可是这种现象又不是绝对的, 就是不一定什么时候就可以连接互联网了, 而又不一定什么时候却又无法连接了.

无法连接互联网的时候都会返回407异常, 也就是说无法连接互联网的时候应该都是连接了我的代理服务器.

所以我查找了一下, 发现.NET默认的设置竟然真的会使用HTTP代理服务器! 链接在这里: http://msdn.microsoft.com/en-US/library/kd3cf2ex(v=vs.80)

在app.config文件中有一段这样的配置:

<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="false"> <!-- 就是它!!! -->
    </defaultProxy>
  </system.net>
</configuration>

其中defaultProxy的enabled属性的默认值竟然是true. 所以我只要把这个值置为false就可以了.

当然, 如果你想让你的程序默认通过代理服务器联网, 那就要把它置为true了. 还有一些其它的可配置项, 自己查阅MSDN吧, 链接已经在上面给出了.

但是还有一点没有搞明白的地方, 就是不知道为什么会偶尔能连接互联网, 偶尔又不能.

补记, 按照上面的方式修改后, 在我的电脑上测试是没问题了, 但是到了客户的机器上, 问题依然存在, 还是会读取浏览器的默认代理配置.太奇怪了!

直接贴解决办法吧, 如果不想要程序默认通过IE的代理的话, 那就给你的请求新建一个Proxy, 但是不要设置proxy的Address属性, 这样, 就不会通过系统的代理了.

本文基于 署名 2.5 中国大陆 许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 Elliot 并包含 原文链接
本文暂时还没有评论,你可以抢沙发哟。

发表评论