在.NET里,如果需要连接网络。部分公司是需要代理上网的,所以很多程序员通过代理等解决,如下

其实,只需要在config里配置即可

<system.net> 
  <defaultProxyuse DefaultCredentials="true"/> 
</system.net>
 

请注意:必须手动设置其为true。但是微软的.NET默认值却将其值设置为false,这就是很多.NET程序无法自动连接的原因

因为涉及到代理的各种情况,WebRequest和WebProxy类的文档写的相当复杂,不但各个文档关注点不同,而且不同版本的同一文档也有小小的区别,网上也没有关于这个类的相关文章。于是乎这篇Blog是我钻研半天MSDN很久后总结并且花了一小时憋出来的,希望下面的内容能帮到大家。
(AcDown中也使用了相关的代码,有兴趣的可以找来看看)

直接进入正题,对于需要使用WebProxy类的情况,大致分如下几种:
1、创建WebRequest的时候,没有刻意设置代理(默认情况)
2、使用Internet Explorer代理
3、使用应用程序配置文件中的代理
4、不使用代理
5、使用.NET框架默认设置的代理
6、使用WPAD配置脚本自动设置的代理
7、使用IE+应用程序配置文件的混合代理
8、使用IE代理但禁用自动代理检测(WPAD)

怎么样,很混乱吧。当然上面这些很多都是重复的,不过基本已经涵盖了所有可能遇到的情况,下面让我来一个一个说说:

1、默认情况下的代理设置
当创建一个新的HTTP请求时(WebRequest.Create方法),得到的HttpWebRequest类会自动初始化它的Proxy属性,那么这个属性的默认值是什么呢?MSDN中说:

 如果配置文件中未指定代理并且未指定 Proxy 属性,则 HttpWebRequest 类使用从本地计算机上的 Internet Explorer 中继承的代理设置。 如果 Internet Explorer 中没有代理设置,请求会直接发送到服务器。

这段话中,说到Proxy属性使用的其实就是默认代理,这个默认代理默认来自于IE,如果IE没有设置代理,那么就会直接连接到目标服务器。为什么要说“默认代理默认来自于IE”呢?因为这个“默认来自于IE”也是可以修改的,通过修改WebProxy.DefaultWebProxy属性,你可以控制每次新建请求时所使用的默认代理:

DefaultWebProxy 属性从 app.config 文件中读取代理服务器设置。 如果没有配置文件,则使用当前用户的 Internet Explorer (IE) 代理设置。

如果 DefaultWebProxy 属性设置为 null,则使用 Create 或 CreateDefault 方法创建的 WebRequest 类的所有后续实例都没有代理。

这里需要注意的是,如果DefaultWebProxy设置为null,并不意味着WebRequest的Proxy属性也是null,这两个null表示的意义不同。

2、使用IE代理,但不使用任何动态设置
最简单的方法是将Proxy属性设置为WebProxy.GetDefaultProxy,GetDefaultProxy会读取当前计算机上的IE代理设置,同时忽略掉所有动态设置的内容:

GetDefaultProxy 方法读取 Internet Explorer 5.5 和更高版本存储的非动态代理设置并使用这些设置创建 WebProxy 实例。

GetDefaultProxy 方法不获取从 Internet Explorer 运行的脚本、从自动配置项或者从 DHCP 或 DNS 查找生成的任何动态设置。

但是这个API已经过时,所以现在我推荐的方法是:将Proxy属性设置为null:
http://msdn.microsoft.com/zh-cn/library/fze2ytx2(v=vs.80).aspx

3、使用IE代理,同时使用各种动态配置项
这个是比较简单的了,当然这种情况还是会包含两种小的情况:
(1)使用app.config中的配置:将Proxy属性设置为 WebProxy.DefaultWebProxy
(2)不使用app.config中的配置:将Proxy属性设置为 WebRequest.GetSystemWebProxy()
GetSystemWebProxy 方法读取当前用户的 Internet Explorer (IE) 代理设置。 此进程包括 IE 选项来自动检测代理设置,请使用自动配置脚本、手动代理服务器设置和高级手动代理服务器设置。

4、不使用任何代理
不使用任何代理的方法是:创建一个WebProxy类的新实例:

默认构造函数通过将 Address 属性设置为 null 来初始化 WebProxy 类的空实例。

Address 属性为 null 时,IsBypassed 方法返回 true,且 GetProxy 方法返回目标地址。

另外再来看看Address属性的说明:

Address 属性包含代理服务器的地址。 如果未启用自动代理检测并且未指定自动配置脚本,则 Address 属性与 BypassList 共同确定用于请求的代理。

当 Address 属性为 null 时,请求回避此代理并且直接连接到目标主机。

综上所述,也就是说,当使用无参构造函数创建一个新的WebProxy对象时(req.Proxy = new WebProxy();),这个请求会绕过所有代理服务器直接连接目标服务器。

5、其他
关于如何设置app.config/machine.config配置文件中的代理设置:
<defaultProxy>元素:http://msdn.microsoft.com/zh-cn/library/kd3cf2ex
<proxy>元素:http://msdn.microsoft.com/zh-cn/library/sa91de1e(v=vs.100).aspx

转载于:https://www.cnblogs.com/mqingqing123/archive/2012/09/04/2670105.html

微软.NET设计上的一个错误(从.NET1.1--4.0),不知道以后.NET会不会修复这个错误...相关推荐

  1. let/var——事实上var的设计可以看成JavaScript语言设计上的错误. 但是这种错误多半不能修复和移除, 以为需要向后兼容.||将let看成更完美的var

    事实上var的设计可以看成JavaScript语言设计上的错误. 但是这种错误多半不能修复和移除, 以为需要向后兼容. 大概十年前, Brendan Eich就决定修复这个问题, 于是他添加了一个新的 ...

  2. struts2文件上传一个错误的解决

    struts2文件上传一个错误的解决 在做struts2的多文件上传时,选择了几个比较大的文件,点击"提交"后,画面没有提示说文件太大,而是清空了各个表单项,查看控制台显示如下错误 ...

  3. 微软 AI 设计原则:成为弱者,再带来惊喜

    来源:36Kr   作者:木木子 编者按:AI设计的思路是什么?更完美?更能想用户之所想?本文作者Cliff Kuang在"The company studied personal assi ...

  4. 我是如何用JSP在网络上架构一个网上招标系统,以推进网站无纸化,过程电子化,管理智能化的发展

    声明:部分代码参考与网络,如有侵权请联系博主删除,博主本着学习的态度和大家一起成长. 项目github地址:https://github.com/sunmenglei/sunmengleiwangsh ...

  5. c语言中如何设计和编写一个应用系统?

    C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如" ...

  6. 一些设计上的基本常识(转载)

    原文地址:http://code.alibabatech.com/blog/experience_886/software_design_general_knowledge.html 最近给团队新人讲 ...

  7. Lachesis Shield 设计上的抉择

    最近有很多朋友和同学跟我谈起 Lachesis Shield 设计上的一些问题.我想我需要总结一下我的设计策略,虽然这是个看起来简单得不能再简单的工具. 我面临的选择: 1 界面位置 显然,有很多位置 ...

  8. 一文教你从零开始设计并实现一个Java扫雷游戏

    背景:扫雷这款游戏有着很长的历史,从扫雷被开发出来到现在进行了无数次的优化,这款游戏变得越来越让人爱不释手了,简单的玩法在加上一个好看的游戏界面,每一处的细节都体现了扫雷的魅力.以JAVA语言作为开发 ...

  9. 一些设计上的基本常识

    http://javatar.iteye.com/blog/706098 最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里. API 与 SPI 分离 框 ...

  10. 多个客户端如何同时连接到服务器上的一个端口(例如80)? [重复]

    本文翻译自:How do multiple clients connect simultaneously to one port, say 80, on a server? [duplicate] T ...

最新文章

  1. 微信生成带参数的二维码,合成海报,扫码后推送小程序?
  2. 静态html页面传递参数,javascript静态页面传值的三种方法分享
  3. linux中Daemon守护进程编程
  4. LeetCode204——count primes
  5. odps新手上路之安装Eclipse开发环境
  6. Inside Kolla - 04 Kolla 目录结构
  7. stringr | 文本处理方法(Ⅰ-3):字符串处理函数(下)
  8. CROC-MBTU 2012, Elimination Round (ACM-ICPC) E. Mishap in Club
  9. nRF52840 dongle BLE sniffer
  10. h5课件制作_教师必备:实用H5课件制作技巧
  11. 台式电脑 航嘉机箱 前面板耳机只有一边(左边)有声音 问题解决
  12. 小猿日记(9) - 今天,我又拒绝了阿里的一次机会
  13. 云服务器安装Linux桌面,centos 云服务器有桌面吗 如何进行安装
  14. 外贸商城建站程序, sylius和magento哪一个更适合企业二次开发
  15. 75-CentOS-Docker构建nginx镜像
  16. Learn UML with JUDE
  17. java中多重if结构_java中的多重if
  18. sql char和varchar的区别
  19. SQL中一些实用的快捷键
  20. 分布式技术一周技术动态 2016-10-09

热门文章

  1. autocad型源代码_AutoCAD文件格式详解
  2. 现阶段选择ArcMap还是ArcGIS Pro
  3. 【层级多标签文本分类】融合标签层级结构的文本分类
  4. 10种提高WordPress访问速度的方法
  5. 在 Python 中使用网格搜索和随机搜索进行超参数调整
  6. 大数据之路、阿里巴巴大数据实践读书笔记目录
  7. 图像分割法-snake
  8. 全球TOP100电子杂志整理
  9. 杂志社的电子邮件地址
  10. 网易公开课专辑下载脚本python