Ich arbeite an einer .NET-App, die Webdienste von Drittanbietern über das Internet aufruft. Da die Dienste SOAP nicht verwenden, erstellen wir manuell ein XML-Anforderungsdokument, senden es über HTTP an den Dienst und rufen eine XML-Antwort ab.
Unser Code ist ein Windows-Dienst, der im Kontext eines normalen Windows-Domänenkontos ausgeführt wird und sich hinter einem Proxyserver (Microsoft ISA Server) befindet, der für die NTLM-Authentifizierung konfiguriert ist. Das Konto, auf dem unser Dienst ausgeführt wird, hat die Berechtigung, über den Proxy-Server auf das Internet zuzugreifen.
Der Code sieht so aus:
%Vor%Dies funktioniert einwandfrei, wenn der Proxy-Server ausgeschaltet ist oder die URL auf die weiße Liste gesetzt wurde und keine Authentifizierung erfordert. Sobald die Authentifizierung jedoch aktiv ist, schlägt sie immer mit einem HTTP 407-Fehler fehl.
Ich habe den obigen Code in eine Testumgebung gesteckt und jede Methode ausprobiert, die ich mir zum Konfigurieren der request.Proxy
-Eigenschaft vorstellen konnte, ohne Erfolg.
Ich habe dann bemerkt, dass alle Webdienste von Drittanbietern, die wir anrufen müssen, HTTPS sind. Als ich versuchte, sie stattdessen als HTTP aufzurufen, begann die Proxy-Authentifizierung zu arbeiten. Gibt es einen zusätzlichen Rahmen, den ich durchlaufen muss, um Proxy-Authentifizierung zu erhalten, und HTTPS, um gut zu spielen?
PS: Die gleichen Probleme treten mit dem Open-Source-SmoothWall-Proxy-Server auf, daher kann ich ihn nicht einfach als Fehler in ISA Server abschreiben.
PPS: Ich bin mir bewusst, dass Sie die Proxy-Einstellungen in app.config
konfigurieren können, aber (a) sollte es keinen Unterschied machen, und (b) der Anwendungsentwurf erfordert, dass wir die Proxy-Einstellungen lesen eine Datenbank zur Laufzeit.
Ich denke, ich werde diese Frage abschreiben müssen. Mein ursprünglich geposteter Code scheint manchmal zu funktionieren. Unser Proxy-Server ist extrem unzuverlässig; eine Minute wird es eine Internetverbindung von jeder Software blockieren, und die nächste wird es erlauben. Die IT-Leute scheinen machtlos, etwas dagegen zu unternehmen, und wir (alle außerhalb der IT-Abteilung) sind nicht befugt, Änderungen an der Netzwerkinfrastruktur vorzunehmen.
Wenn jemand Ideen hat, wie ich meinen Code "aushärten" kann, um einen unzuverlässigen Proxy-Server zu kompensieren, würde ich mich freuen, sie zu hören. : -)
Haben Sie versucht, den Proxy in der app.config zu setzen?
Um den Proxy zu deaktivieren, fügen Sie in der App.config-Datei die folgende Konfiguration hinzu
%Vor%Um den Proxy zu aktivieren und die Standard-Proxy-Einstellungen (im IE angegeben) zu verwenden, fügen Sie diese Konfiguration in Ihrer App.config
hinzu %Vor%Ich hatte eine ähnliche Situation
Haben Sie bemerkt, dass es funktioniert hat, als Sie auf das Internet zugegriffen haben, bevor Sie den Code ausgeführt haben? und wenn du seit Ewigkeiten nicht mehr auf das Internet zugegriffen hast (20 Minuten für mich), hast du den Fehler erhalten.
Haben Sie versucht, die Proxy-Anmeldedaten direkt festzulegen?
%Vor%Ich habe kürzlich darüber gebloggt / p>
Ich hoffe, das behebt Ihr Problem auch!
Tags und Links .net c# windows-services proxy authentication