【问题标题】:What's the difference between WebRequest.DefaultWebProxy and WebRequest.GetSystemWebProxy()?WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有什么区别?
【发布时间】:2013-01-31 00:19:31
【问题描述】:

我想知道DefaultWebProxyGetSystemWebProxy() 之间的主要区别是什么。 MSDN上有一些描述,但我还是觉得需要更多细节才能更好地理解。

另外,假设我的 C# winform 应用程序有以下代理配置选项

  1. 自动检测代理设置
  2. 使用系统默认设置
  3. 无代理

那么哪个方法去哪个选项?说Auto-detect proxy在某种程度上等于Use system default设置是否正确?

【问题讨论】:

    标签: c# .net networking proxy


    【解决方案1】:

    根据MSDN articleWebRequest.DefaultWebProxy,此属性将提供app.config 文件中指定的代理信息。 .NET Framework v3.5 MSDN Article 似乎缺少此特定细节。

    WebRequest.GetSystemWebProxy() 而言,MSDN article for it 声明此方法将提供系统范围的已配置代理(控制面板> Internet 选项)。


    这就是我建议您实现上述三个选项的方式:

    1. 自动检测代理设置
      • 实现您自己的代理发现逻辑;
      • 更改系统设置以匹配您的应用程序设置,并使用WebRequest.GetSystemWebProxy()我不推荐这种方法);
      • 最好不要包含此选项,让用户使用相应的系统范围设置以及“使用系统默认设置”选项;
    2. 使用系统默认设置
      • 使用WebRequest.GetSystemWebProxy();
    3. 无代理
      • 确保取消设置WebRequest.DefaultWebProxyWebRequest.Proxy 属性;

    编辑:如果app.config中没有配置代理,WebRequest.DefaultWebRequest几乎WebRequest.GetSystemWebProxy()相同(至少对于.NET 4.5)。不同之处在于 WebRequest.GetSystemWebProxy() 将运行 PAC 脚本(如果有)以进行代理定义。
    感谢 Gabrielius23W 提供以下 cmets。

    【讨论】:

    • 感谢您的回答,杰西。我会考虑实施的方法。让我们看看其他人怎么说。
    • @woodykiddy 不客气,但是,您能否详细说明您要完成的工作?此外,您能否定义与DefaultWebProxyGetSystemWebProxy() 之间的差异相关的详细信息?
    • 我正在尝试提供用户可以选择是否使用代理的选项。客户端应用程序将在调用 Web 服务之前应用代理设置。正如我在之前的帖子中所说,我只是觉得这里有点不确定。在我看来,这两个 API 提供的功能几乎相同。
    • @woodykiddy 他们提供了类似的东西,但并不完全相同。 DefaultWebProxy 将是 app.config 文件中的设置 - 无论是由用户手动输入,还是通过应用程序设置; GetSystemWebProxy() 严格来说是系统范围的 Internet 选项设置。基本上,DefaultWebProxy 可以用作应用程序的“自定义代理配置”,GetSystemWebProxy() 相当于“使用系统设置”。
    • 已经好几年了,但是@Jesse,如果在app.config中没有配置代理,你可以添加一个注释,WebRequest.DefaultWebRequest最初等于WebRequest.GetSystemWebProxy() >(至少对于 .NET 4.5)。
    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多