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.

Schreibe einen Kommentar