2013-06-06 9 views
9

Ich rufe einen Webservice von einer WinForms App an. Alles funktioniert gut, wenn ein Proxy-Server nicht verwendet wird. Wenn jedoch ein Proxy verwendet wird, stürzt die App ab, da anstelle der erwarteten XML-Antwort für die SOAP-Anfrage eine HTML-Fehlerseite mit dem Hinweis "Authentifizierung erforderlich" angezeigt wird.Wie kann ich den WebClient (Webservice-Client) dazu bringen, automatisch den Standard-Proxy-Server zu verwenden?

Es scheint, dass Sie den Proxyserver manuell wie folgt einstellen:

WebClient client = new WebClient(); 
WebProxy wp = new WebProxy("proxy server url here"); 
client.Proxy = wp; 

... aber zu einem gewissen Grad, wie es scheint den Proxy-Server sowieso sehen werden OHNE die oben tun, als der Fehler generiert kommt eigentlich vom Proxy-Server. Es scheint nur nicht die Anmeldedaten für die Windows-Authentifizierung vom Computer des Benutzers abzurufen. Wie kann ich es dazu zwingen?

Auf meinem eigenen Rechner, wenn ich dies mit Fiddler simuliere (und die Option "Proxy-Authentifizierung erforderlich"), bekomme ich einen Dialog, der nach den Zugangsdaten fragt, aber das scheint auf den Rechnern meines Clients nicht zu passieren (die einen echten Hardware-Proxy verwenden - McAfee Web Gateway).

Wie kann ich damit umgehen? Muss ich den Benutzern einen Dialog zur Verfügung stellen, um den Server manuell zu konfigurieren, oder gibt es eine Einstellung, die WebClient anweist, den Windows-Standardproxy und die eigenen Anmeldedaten des Benutzers zu verwenden?

aktualisiert

Scheint, wie Sie den Proxy-Server abholen können den Code verwenden, aber das führt nicht zu dem Authentifizierungsdialog in allen Situationen erscheint (funktioniert auf einigen PCs aber nicht auf anderen):

Wenn der obige Code korrekt ist, verstehe ich nicht, warum einige Benutzer nicht nach ihren Anmeldeinformationen gefragt werden. Muss ich meinen eigenen Code eingeben, um die Benutzeranmeldeinformationen zu sammeln und sie dem WebRequest-Objekt bereitzustellen?

+0

Haben Sie das gesuchte [WindowsIdentity.Impersonate Methode] (http://msdn.microsoft.com/en-us/library/w070t6ka%28v=vs.100%29.aspx) ? –

+1

Nicht sicher, dass das relevant ist, da meine App bereits als lokaler Benutzer ausgeführt wird, denke ich? – NickG

+0

Doh, mein Schlechter ... Ich habe in letzter Zeit zu viel mit SQL CLRSprocs zu tun gehabt ... "Wenn du nur [einen] Hammer benutzt ..." –

Antwort

0

Erster Versuch, diese verwenden:

WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy; 
if (proxy.Address.AbsoluteUri != string.Empty) 
{ 
    Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri); 
    client.Proxy = proxy; 
} 

wenn dies nicht versuchen, mit nicht funktioniert:

WebProxy proxy = WebProxy.GetDefaultProxy() 
client.Proxy = proxy; 
+1

WebPRoxy.GetDefaultProxy ist veraltet. –

16

Versuchen Zugabe

<system.net> 
    <defaultProxy useDefaultCredentials="true" /> 
    </system.net> 

auf Ihre Datei app.config

+0

Perfekt, war so schwer, diese Antwort auf Google zu finden .... – GONeale

+0

Funktioniert nicht für mich. – NickG

+1

in web.config hilft es auch. sollte in platziert werden – Stanislav

3

dies sollte funktionieren

+0

Funktioniert nicht für mich, ich bekomme immer noch "407 Proxy-Authentifizierung erforderlich" –

+0

Siehe https://stackoverflow.com/questions/299940/how-should-i-set-the-default- Proxy-to-Use-Standard-Anmeldedaten –