问题
I am trying to call a webservice. I need to use a proxy that uses a WPAD script. The URL to this WPAD script is different for different deployments of the application.
Although IE has the correct proxysettings, the application is running as a windows service running under Local System account, so the application does not know the IE-settings for this windows-user.
Putting the following in app.config works:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true" >
<proxy autoDetect="True" scriptLocation="http://url.to/wpad.dat"/>
</defaultProxy>
</system.net>
But this has the restriction that it cannot be configured by the user. Is there a way to do the above dynamically from (C#-)code? I also suspect the above will change behaviour of webservices that should not go through a proxy (but I have not verified that).
At http://msdn.microsoft.com/en-us/library/system.net.webproxy.aspx I found the helpful text: "(For an example that demonstrates using the WPAD feature, see the documentation for the IWebProxyScript class.)" but I have not found the example :(.
回答1:
This article on code project shows how to use windows APIs to execute the PAC script and return the correct proxy details for a given url: http://www.codeproject.com/Articles/12168/Using-PAC-files-proxy
You could use the function to find out the proxy details, and then configure the web service objects proxy directly, or change WebRequest.DefaultProxy.
回答2:
IWebProxyScript is used internally by WebProxy itself.
If you initialize a WebProxy with the URL to a WPAD script, it will resolve the correct URL for the requests that are passed to it. You can set that WebProxy to a WebRequest and it will automatically handle setting the correct proxy URL for the target of the request.
WebRequest request = WebRequest.Create("http://targeturl");
request.Proxy = new WebProxy("http://url.to/wpad.dat");
You can also get out the proxy URL for a given target like so:
WebProxy proxy = new WebProxy("http://url.to/wpad.dat");
Uri proxyUri = proxy.GetProxy(new Uri("http://targeturl"));
This DOES NOT work for PAC scripts.
来源:https://stackoverflow.com/questions/8895754/dynamically-using-a-webproxy-with-wpad-script