我正在尝试拨打网络服务。我需要使用使用WPAD脚本的代理。此WPAD脚本的URL对于应用程序的不同部署是不同的。
虽然IE具有正确的代理设置,但应用程序作为在本地系统帐户下运行的Windows服务运行,因此应用程序不知道此Windows用户的IE设置。
将以下内容放在app.config中:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/>
</defaultProxy>
</system.net>
但是这有一个限制,即用户无法配置它。有没有办法从(C# - )代码动态执行上述操作?我也怀疑上面会改变不应该通过代理服务的webservices的行为(但我还没有验证过)。
在http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx我找到了有用的文字:“(有关演示使用WPAD功能的示例,请参阅IWebProxyScript类的文档。)”但我没有找到示例:(。
答案 0 :(得分:1)
这篇关于代码项目的文章展示了如何使用Windows API执行PAC脚本并返回给定URL的正确代理详细信息: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy
您可以使用该功能查找代理详细信息,然后直接配置Web服务对象代理,或更改WebRequest.DefaultProxy。
答案 1 :(得分:0)
IWebProxyScript由WebProxy本身内部使用。
如果使用WPAD脚本的URL初始化WebProxy,它将解析传递给它的请求的正确URL。您可以将WebProxy设置为WebRequest,它将自动处理为请求目标设置正确的代理URL。
WebRequest request = WebRequest.Create("http://targeturl");
request.Proxy = new WebProxy("http://url.to/wpad.dat");
您还可以获取给定目标的代理网址,如下所示:
WebProxy proxy = new WebProxy("http://url.to/wpad.dat");
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl"));
这不适用于PAC脚本。