.NET客户端应用程序:在代理的情况下如何访问Web服务?
我们正在开发.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上有一篇描述它的文章。