6

我正在尝试调用网络服务。我需要使用使用 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#-)代码动态地执行上述操作?我还怀疑上述内容会改变不应通过代理的 Web 服务的行为(但我尚未验证)。

http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx我找到了有用的文本:“(有关演示使用 WPAD 功能的示例,请参阅 IWebProxyScript 类的文档。 )" 但我还没有找到这个例子:(。

4

2 回答 2

1

这篇关于代码项目的文章展示了如何使用 Windows API 来执行 PAC 脚本并为给定的 url 返回正确的代理详细信息:http: //www.codeproject.com/Articles/12168/Using-PAC-files-proxy

您可以使用该功能查找代理详细信息,然后直接配置 Web 服务对象代理,或更改 WebRequest.DefaultProxy。

于 2012-01-24T14:33:09.660 回答
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");

您还可以像这样获取给定目标的代理 URL:

WebProxy proxy = new WebProxy("http://url.to/wpad.dat");    
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl"));

这不适用于 PAC 脚本。

于 2014-03-07T18:27:14.123 回答