The remote server returned an error: (407) Proxy Authentication Required
I'm getting this error when I call a web service:
"The remote server returned an error: (407) Proxy Authentication Required".
I get the general idea and I can get the code to work by adding
myProxy.Credentials = NetworkCredential("user", "password", "domain");
or by using DefaultCredentials in code. My problem is that the call to the web service works in production without this.
It seems like there is a non code solution involving Machine.config, but what is it? At the moment I can't get to the production box's machine.config file to see what that looks like. I tried updating my machine.config as follows, but I still get the 407 error.
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<bypasslist>
<clear />
</bypasslist>
<proxy proxyaddress="myproxy:9000"
usesystemdefault="false"
bypassonlocal="true"
autoDetect="False" />
</defaultProxy>
</system.net>
Solution 1:
Just add this to config
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
Solution 2:
In following code, we don't need to hard code the credentials.
service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Solution 3:
Check with your firewall expert. They open the firewall for PROD servers so there is no need to use the Proxy.
Thanks your tip helped me solve my problem:
Had to to set the Credentials in two locations to get past the 407 error:
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password", "domain");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");
and voila!
Solution 4:
Probably the machine or web.config in prod has the settings in the configuration; you probably won't need the proxy tag.
<system.net>
<defaultProxy useDefaultCredentials="true" >
<proxy usesystemdefault="False"
proxyaddress="http://<ProxyLocation>:<port>"
bypassonlocal="True"
autoDetect="False" />
</defaultProxy>
</system.net>