.NET客户端应用程序:在代理的情况下如何访问Web服务?

时间:2020-03-06 14:39:46  来源:igfitidea点击:

我们正在开发.NET 2.0 Winform应用程序。该应用程序需要访问Web服务。但是,代理服务器背后的用户遇到了问题。

流行的Windows备份应用程序(例如Mozy)正在提供一个专用于代理设置的中等复杂的对话框窗口。但是,重新实现另一个代理处理逻辑和GUI在我看来完全是浪费时间。

用.NET客户端应用程序处理代理的最佳方法是什么?

更具体地说,我们遇到一种情况,即用户已在Internet Explorer中记录了他的代理设置(包括用户名和密码),因此.NET的默认代理行为应该起作用。但是,启动IE时仍会提示用户输入用户名和密码(两个字段均已完成,用户只需单击"确定"),并且我们的winform应用程序仍无法处理代理。

在启动IE时,我们应怎么做以强制不提示用户输入用户名和密码?

解决方案

最简单的方法是使用IE资源管理器中的代理设置。

研究使用.NET WebProxy类。它支持自动选择正确的默认设置。

使用WebProxy和WebRequest类。仅将它包装到我们自己的库中一次,并在我们要使用代理的任何地方使用。

将其放入应用程序的配置文件中:

<configuration>
  <system.net>
    <defaultProxy>
      <proxy autoDetect="true" />
    </defaultProxy>
  </system.net>
</configuration>

并且应用程序将使用IE中的代理设置。如果我们可以使用代理服务器在IE中看到Web服务,则应该能够从应用程序中"看到"它。

如果打开IE,请在代理对话框中单击"确定",然后(保持IE打开)尝试连接Winforms应用程序,然后应用程序可以正常工作吗?还是应用无论如何都无法处理代理?

客户端是否都在同一网络上遇到代理问题(即它们是否都使用同一台代理服务器)?

我认为询问者了解如果用户需要代理,他必须使用WebProxy,问题是"如何获取IE的代理设置,因此我不必要求用户也将其键入到我的应用程序中?"

System.Net.WebProxy.GetDefaultProxy已过时,我们必须使用System.Net.WebRequest.DefaultWebProxy。在http://msdn.microsoft.com/zh-cn/magazine/cc300743.aspx上有一篇描述它的文章。