Wir haben eine WPF-Anwendung mit C# entwickelt haben und verwenden RestSharp mit einem einfachen Web-Service wie folgt zu kommunizieren:401 beim Aufruf von Web-Service nur auf bestimmten Maschinen
Client = new RestClient(serviceUri.AbsoluteUri);
Client.Authenticator = new NtlmAuthenticator(SvcUserName, SvcPassword.GetString());
Alles hat super geklappt, bis wir Anrufe erhalten, dass Auf einigen Computern (die meisten funktionieren) kann die App keine Verbindung zum Dienst herstellen. Ein direkter Aufruf an die Service-Methode mit Fiddler funktioniert. Dann extrahierten wir eine kleine .net-Konsolen-App und probierten den Service-Aufruf mit RestSharp und direkt mit einem HttpWebRequest und es scheiterte wieder mit 401. Nun haben wir System.Net-Tracing aktiviert und etwas bemerkt. Nach den ersten 401, was normal ist, erzeugt die fehlerhafte Maschine dieses Protokoll:
System.Net Information: 0: [4480] Verbindung # 3741682 - Empfangene Header { Connection: Keep-Alive- Content-Length : 1293 Content-Type: text/html Datum: Mo, 10. August 2015 00.37.49 GMT Server: Microsoft-IIS/8.0 WWW-Authenticate: Negotiate, NTLM X-Powered-By: ASP.NET }. System.Net Informationen: 0: [4480] ConnectStream # 39451090 :: ConnectStream (gepuffert 1293 Bytes.) System.Net Information: 0: [4480] Verknüpfung von HttpWebRequest # 2383799 mit ConnectStream # 39451090 System.Net Information: 0: [4480] Verknüpfen von HttpWebRequest # 2383799 mit HttpWebResponse # 19515494 System.Net Information: 0: [4480] Auflisten von Sicherheitspaketen: System.Net Information: 0: [4480] Aushandeln System.Net Information: 0: [4480] NegoExtender System.Net Informationen: 0: [4480] Kerberos System.Net Informationen: 0: [4480] NTLM System.Net Informationen: 0: [4480] Schannel System.Net Information: 0: [4480] Microsoft Unified Security Protokollanbieter System.Net Information: 0: [4480] WDigest System.Net Information: 0: [4480] TSSSP System.Net Information: 0: [4480] pku2u System.Net Information: 0: [4480] CredSSP
System.Net Information: 0: [4480] AcquireCredentialsHandle (package = NTLM, Vorsatz = Outbound, authdata = (String.Empty) \ corp \ svc_account)
System.Net Information: 0 : [4480] InitializeSecurityContext (Anmeldeinformationen = System.Ne t.SafeFreeCredential_SECURITY, Kontext = (null), Zielname = HTTP/mysvc.mycorp.com, inFlags = Delegieren, MutualAuth, Verbindung) System.Net Information: 0: [4480] InitializeSecurityContext (In-Puffer zählen = 1, Out-Buffer-Länge = 40, zurückgegebener Code = ContinueNeeded).
Eine Arbeitsmaschine erzeugt diese Ausgabe:
System.Net Information: 0: [3432] Verbindung # 57733168 - Empfangene Statusleiste: Version = 1.1, Statuscode = 401, StatusDescription = Unerlaubte. System.Net Information: 0: [3432] Verbindung # 57733168 - Header { Content-Type: text/html Server: Microsoft-IIS/8.0 WWW-Authenticate: Verhandeln, NTLM X-Powered-by: ASP.NET Datum: Mo, 10 Aug 2015 15:15:11 GMT Inhalt-Länge: 1293 } wurde empfangen. System.Net Informationen: 0: [3432] ConnectStream # 35016340 :: ConnectStream (Es wurde 1293 Bytes gepuffert.) System.Net Information: 0: [3432] Verknüpfung von HttpWebRequest # 64062224 mit ConnectStream # 35016340 System.Net Information: 0: [3432] Verknüpfung von HttpWebRequest # 64062224 mit HttpWebResponse # 64254500 System.Net Information: 0: [3432] Sicherheitspakete werden enumeriert: System.Net Information: 0: [3432] System.Net Information: 0: [3432 ] System.Net Information: 0: [3432] Kerberos System.Net Information: 0: [3432] NTLM System.Net Informationen: 0: [3432] Schannel System.Net Information: 0: [3432] Microsoft Einheitliches Sicherheitsprotokoll Prov ider System.Net Information: 0: [3432] WDigest System.Net Information: 0: [3432] TSSSP System.Net Information: 0: [3432] pku2u System.Net Information: 0: [3432] CredSSP
System.Net Information: 0: [3432] AcquireCredentialsHandle (Paket = Verhandeln, Absicht = Outbound, authdata = System.Net.SafeSspiAuthDataHandle) System.Net Information: 0: [3432] InitializeSecurityContext (Anmeldeinformationen = System.Net.SafeFreeCredential_SECURITY, conte xt = (null), target = HTTP/mysvc.mycorp.com, inFlags = Delegierter, MutualAuth, Verbindung)
System.Net Information: 0: [3432] InitializeSecurityContext (Anzahl von In-Buffers = 1, Länge von Out-Buffer = 40, zurückgebender Code = .
Ich frage mich, ob einige Konfiguration auf der fehlerhaften Maschine dies verursachen würde. Im Moment bin ich mir nicht sicher, wo ich als nächstes hinschauen soll.
Update: Hier ist der Code unserer einfachen Test-Tool:
RestClient Client = new RestClient("https://mysvc.mycorp.com/service.svc");
Client.Authenticator = new NtlmAuthenticator("corp\\svc_account", "mypassword");
var request = new RestRequest("api/Method", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(new { Device_Key = "somestring" });
request.Timeout = 200000;
RestResponse response = (RestResponse)Client.Execute(request);
Update 2: Wir haben nun bestätigt, dass dieses Problem nur auf tritt neu gewinnen 7 installierte Maschinen, die eine aktualisierte Firmenimage. Fast Sieht aus wie ein Update in den letzten 2 Monaten.
Könnten Sie die MCVE-Konsole-Anwendung, die Sie erstellt haben, posten? –
Hier gehen Sie, ich habe den Code hinzugefügt – hoetz