Je reçois cette erreur lorsque j'appelle un service Web:
"Le serveur distant a renvoyé une erreur: Authentification du proxy (407) requise".
Je reçois l'idée générale et je peux obtenir le code au travail en ajoutant
myProxy.Credentials = NetworkCredential("user", "password", "domain");
ou en utilisant DefaultCredentials dans le code. Mon problème est que l'appel au service Web fonctionne en production sans cela.
Il semble qu'il existe une solution sans code impliquant Machine.config, mais de quoi s'agit-il? Pour le moment, je ne peux pas accéder au fichier machine.config de la boîte de production pour voir à quoi cela ressemble. J'ai essayé de mettre à jour mon machine.config comme suit, mais j'obtiens toujours l'erreur 407.
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<bypasslist>
<clear />
</bypasslist>
<proxy proxyaddress="myproxy:9000"
usesystemdefault="false"
bypassonlocal="true"
autoDetect="False" />
</defaultProxy>
</system.net>
Il suffit d'ajouter ceci à la configuration
<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
Dans le code suivant, nous n'avons pas besoin de coder en dur les informations d'identification.
service.Proxy = WebRequest.DefaultWebProxy;
service.Credentials = System.Net.CredentialCache.DefaultCredentials; ;
service.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Vérifiez auprès de votre expert en pare-feu. Ils ouvrent le pare-feu pour les serveurs PROD. Il n’est donc pas nécessaire d’utiliser le proxy.
Merci votre astuce m'a aidé à résoudre mon problème:
Il a fallu définir les informations d'identification à deux endroits pour dépasser l'erreur 407:
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");
et le tour est joué!
Probablement la machine ou web.config dans prod a les paramètres dans la configuration; vous n'aurez probablement pas besoin de la balise proxy.
<system.net>
<defaultProxy useDefaultCredentials="true" >
<proxy usesystemdefault="False"
proxyaddress="http://<ProxyLocation>:<port>"
bypassonlocal="True"
autoDetect="False" />
</defaultProxy>
</system.net>
HttpWebRequest webRequest = WebRequest.Create(uirTradeStream) as HttpWebRequest;
webRequest.Proxy = WebRequest.DefaultWebProxy;
webRequest.Credentials = new NetworkCredential("user", "password");
webRequest.Proxy.Credentials = new NetworkCredential("user", "password");
C'est réussi.
J'ai eu un problème similaire lié au proxy. Dans mon cas, il suffisait d'ajouter:
webRequest.Proxy.Credentials = new NetworkCredential("user", "password", "domain");