2015-08-11 24 views
15

Abbiamo sviluppato un'applicazione WPF con C# e utilizza RestSharp per comunicare con un semplice servizio Web in questo modo:401 quando si chiama Web Service solo su macchine particolari

Client = new RestClient(serviceUri.AbsoluteUri); 
Client.Authenticator = new NtlmAuthenticator(SvcUserName, SvcPassword.GetString()); 

Tutto ha funzionato bene fino a quando abbiamo ricevuto le chiamate che su alcune macchine (la maggior parte funzionano) l'app non può connettersi al servizio. Una chiamata diretta al metodo di servizio con il violinista ha funzionato. Quindi abbiamo estratto una piccola app di console .net e provato la chiamata di servizio con RestSharp e direttamente con HttpWebRequest e ha fallito di nuovo con 401. Ora abbiamo abilitato la traccia System.Net e notato qualcosa. Dopo il primo 401, che è normale, la macchina difettosa produce questo registro:

System.Net Informazioni: 0: [4480] Connection # 3.741.682 - intestazioni ricevuti { Connection: Keep-Alive Content-Length : 1293 Content-Type: text/html Data: lunedì, 10 Agosto 2015 12:37:49 GMT Server: Microsoft-IIS/8.0 WWW-Authenticate: Negotiate, NTLM X-Powered-By: ASP.NET }. Informazioni su System.Net: 0: [4480] ConnectStream # 39451090 :: ConnectStream (1293 byte bufferizzati) Informazioni su System.Net: 0: [4480] Associazione di HttpWebRequest # 2383799 con ConnectStream # 39451090 Informazioni su System.Net: 0: [4480] Associazione di HttpWebRequest # 2383799 con HttpWebResponse # 19515494 Informazioni su System.Net: 0: [4480] Enumerazione dei pacchetti di sicurezza: Informazioni su System.Net: 0: [4480] Negoziare Informazioni su System.Net: 0: [4480] NegoExtender System.Net Informazioni: 0: [4480] Kerberos System.Net Informazioni: 0: [4480] NTLM System.Net Informazioni: 0: [4480] Schannel System.Net Informazioni: 0: [4480] Microsoft sulla sicurezza unificata Provider di protocollo System.Net Informazioni: 0: [4480] WDigest System.Net Informazioni: 0: [4480] TSSSP System.Net Informazioni: 0: [4480] pku2u System.Net Informazioni: 0: [4480] CredSSP

System.Net Informazioni: 0: [4480] AcquireCredentialsHandle (package = NTLM, intento = uscita, AuthData = (String.Empty) \ corp \ svc_account)

System.Net Informazioni: 0 : [4480] InitializeSecurityContext (credenziale = System.Ne t.SafeFreeCredential_SECURITY, context = (null), targetName = HTTP/mysvc.mycorp.com, inFlags = Delegate, MutualAuth, Connessione) System.Net Informazioni: 0: [4480] InitializeSecurityContext (Conteggio buffer = 1, Out-Buffer length = 40, codice restituito = ContinueNeeded).

Una macchina di lavoro produce questo output:

System.Net Informazioni: 0: [3432] Connection # 57.733.168 - Empfangene Statusleiste: Version = 1.1, StatusCode = 401, StatusDescription = non autorizzato. Informazioni System.Net: 0: [3432] Connessione # 57733168 - Intestazione { Content-Type: text/html Server: Microsoft-IIS/8.0 Autenticazione WWW: negoziazione, NTLM X-Powered-By: ASP.NET Data: lun, 10 ago 2015 15:15:11 GMT Content-Length: 1293 } wurden empfangen. Informazioni su System.Net: 0: [3432] ConnectStream # 35016340 :: ConnectStream (Es wurden 1293 Byte gepuffert.) Informazioni su System.Net: 0: [3432] Associazione HttpWebRequest # 64062224 con ConnectStream # 35016340 Informazioni su System.Net: 0: [3432] Associazione HttpWebRequest # 64062224 con HttpWebResponse # 64254500 System.Net Informazioni: 0: [3432] Sicherheitspakete werden enumeriert: System.Net Informazioni: 0: [3432] Negoziare System.Net Informazioni: 0: [3432 ] NegoExtender Informazioni su System.Net: 0: [3432] Kerberos Informazioni su System.Net: 0: [3432] NTLM Informazioni su System.Net: 0: [3432] Schannel Informazioni su System.Net: 0: [3432] Microsoft Unified Security Protocol Prov IDER System.Net Informazioni: 0: [3432] WDigest System.Net Informazioni: 0: [3432] TSSSP System.Net Informazioni: 0: [3432] pku2u System.Net Informazioni: 0: [3432] CredSSP

System.Net Informazioni: 0: [3432] AcquireCredentialsHandle (package = negoziare, intento = uscita, AuthData = System.Net.SafeSspiAuthDataHandle) System.Net Informazioni: 0: [3432] InitializeSecurityContext (credential = System.Net.SafeFreeCredential_SECURITY, conte xt = (null), targetName = HTTP/mysvc.mycorp.com, inFlags = delegato, MutualAuth, Connessione)

System.Net Informazioni: 0: [3432] InitializeSecurityContext (Anzahl von In-Buffer = 1, Länge von Out-Buffer = 40, codice zurückgegebener = ContinueNeeded).

Mi chiedo se qualche configurazione sulla macchina difettosa causerebbe questo. Al momento non sono sicuro di dove cercare dopo.

Aggiornamento: Ecco il codice del nostro semplice strumento di prova:

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); 

Aggiornamento 2: Ora abbiamo confermato che questo problema si verifica solo in appena installato vincere 7 macchine che hanno una versione aggiornata di immagine aziendale. Sembra quasi che qualche aggiornamento negli ultimi 2 mesi ci stia rovinando.

+0

Potresti pubblicare l'applicazione della console MCVE che hai creato? –

+0

ecco qui, ho aggiunto il codice – hoetz

risposta

6

Questo è pazzesco: risulta che, non appena ho installato .net 4.5 sul computer Windows 7, il WebRequest ha funzionato! Riteniamo che il colpevole fosse una patch mancante di .NET 4.0 Framework distribuita su tutte le macchine client. Quindi, correggi le tue macchine :)

Problemi correlati