HTTP 407 Proxyauthentifizierung Fehler beim Aufruf einer web-service
Arbeite ich an einem .Die NETTO-app, die Anrufe 3rd-party-web-services über das internet. Die services verwenden Sie keine SEIFE, so dass wir manuell erstellen eines XML-request-Dokument, schicken Sie es an den service über HTTP, und rufen Sie eine XML-Antwort.
Unser code ist ein Windows-Dienst, der ausgeführt wird, im Kontext einer normalen Windows-Domäne-Konto, und sitzt hinter einem proxy-server (Microsoft ISA-Server) konfiguriert ist, um die NTLM-Authentifizierung erfordern. Das Konto läuft unser service verfügt über die Berechtigung zum Zugriff auf das internet über den proxy-server.
Der code sieht so aus:
//Create the request object.
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "POST";
//Configure for authenticating proxy server requiring Windows domain credentials.
request.Proxy = New WebProxy(proxyAddress) { UseDefaultCredentials = true };
//Set other required headers.
request.Accept = acceptableMimeType;
request.Headers.Add(HttpRequestHeader.AcceptCharset, acceptableCharset);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "none");
request.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-gb");
request.Headers.Add(HttpRequestHeader.CacheControl, "no-store");
request.Headers.Add(HttpRequestHeader.ContentEncoding, "none");
request.Headers.Add(HttpRequestHeader.ContentLanguage, "en-gb");
request.ContentType = requestMimeType;
request.ContentLength = requestBytes.Length;
//Make the method call.
using(Stream stream = request.GetRequestStream()) {
stream.Write(requestBytes, 0, requestBytes.Length);
}
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
//Extract the data from the response without relying on the HTTP Content-Length header
//(we cannot trust all providers to set it correctly).
const int bufferSize = 1024 * 64;
List<byte> responseBytes = new List<byte>();
using(Stream stream = new BufferedStream(response.GetResponseStream(), bufferSize)) {
int value;
while((value = stream.ReadByte()) != -1) {
responseBytes.Add((byte) value);
}
}
Dies funktioniert gut, wenn der proxy-server deaktiviert, oder die URL wurde in der Whitelist als nicht die eine Authentifizierung erfordern, aber sobald die Authentifizierung aktiv ist, es schlägt immer fehl mit einem HTTP-407 Fehler.
Legte ich den oben genannten code in eine Testumgebung, und versucht, jede Methode, die ich denken konnte, für die Konfiguration der request.Proxy
Eigenschaft, ohne Erfolg.
Habe ich dann bemerkt, dass alle 3rd-party-web-services, die wir haben, zu nennen sind HTTPS. Als ich versuchte, den Zugriff auf Sie als HTTP-stattdessen werden die proxy-Authentifizierung zu arbeiten begonnen. Gibt es einige extra-hoop-Reifen habe ich durch springen zu bekommen, die proxy-Authentifizierung und HTTPS zu schön spielen?
PS: Den gleichen Problemen, die mit dem open-source-SmoothWall-proxy-server, ich kann also nicht einfach schreiben es aus wie ein Fehler in ISA Server.
PPS: ich bin mir bewusst, dass können Sie konfigurieren Sie die proxy-Einstellungen in app.config
, aber a) tut es in der code sollte keinen Unterschied machen, und (b) die Anwendung design verlangt, dass wir Lesen Sie die proxy-Einstellungen aus einer Datenbank zur Laufzeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, die Einstellung der proxy in der app.config ?
Deaktivieren Sie den proxy, in der App.config-Datei fügen Sie die folgende Konfiguration
Aktivieren Sie den proxy und die Verwendung der Standard-proxy-Einstellungen(angegeben im IE) fügen Sie diese Konfiguration in der App.config
Habe ich in einer ähnlichen situation
Hast du bemerkt, es funktionierte, wenn man Zugriff auf das internet, bevor Sie lief der code? und wenn Sie hatte kein Zugriff auf das internet für Alter (20 Minuten für mich) hast du den Fehler.
haben Sie versucht, die proxy-Anmeldeinformationen direkt?
Ich hoffe das behebt dein Problem auch
Ich denke, ich werde zu schreiben, aus dieser Frage. Meine original geschrieben code scheint zu arbeiten manchmal. Unser proxy-server sehr unzuverlässig; eine minute blockieren einer internet-Verbindung von jedem beliebigen software, und in der nächsten wird es ermöglichen. Die IT-Jungs scheinen machtlos, etwas dagegen zu tun, und wir (jeder außerhalb der IT-Abteilung) haben keine Autorität, um änderungen an der Netzwerk-Infrastruktur.
Wenn jemand irgendwelche Ideen auf, wie "hart" mein code zu kompensieren für einen unzuverlässigen proxy-server, dann wäre ich daran interessiert, Sie zu hören. 🙂
Gibt es etwas falsch mit Ihrem proxy-server-Zertifikat? Wenn Ihr Dienst nicht einrichten können HTTPS, dann wird es werfen eine Fehlermeldung.