2015-08-11 34 views
15

Opracowaliśmy aplikacji WPF C# i korzystania RestSharp komunikować się z prostej usługi sieci Web, takich jak ten:401 Dzwoniąc Web Service tylko na poszczególnych maszynach

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

Wszystko działało świetnie dopóki nie odebranych połączeń, które na niektórych komputerach (większość pracy) aplikacja nie może połączyć się z usługą. Zadziałało bezpośrednie wywołanie metody serwisowej z klawiszem. Następnie wyodrębniliśmy małą aplikację konsolową .net i wypróbowaliśmy wywołanie usługi z RestSharp i bezpośrednio za pomocą HttpWebRequest, a następnie ponownie wykonaliśmy operację 401. Teraz włączono śledzenie System.Net i zauważyliśmy coś. Po pierwszej 401, co jest normalne, wadliwa maszyna produkuje ten dziennik:

System.Net informacji: 0: [4480] Połączenie # 3741682 - nagłówki Odebrane { Connection: keep-alive Content-Length : 1293 Content-Type: text/html Data: pon., 10 sierpnia 2015 12:37:49 GMT Serwer: Microsoft-IIS/8.0 Uwierzytelnianie WWW: Negocjuj, NTLM X-Powered-By: ASP.NET }. System.Net Informacje: 0: [4480] ConnectStream # 39451090 :: ConnectStream (buforowane 1293 bajtów). System.Net Informacje: 0: [4480] Skojarzenie HttpWebRequest # 2383799 z ConnectStream # 39451090 System.Net Informacje: 0: [4480] Skojarzenie HttpWebRequest # 2383799 z HttpWebResponse # 19515494 Informacje System.Net: 0: [4480] Wyliczanie pakietów bezpieczeństwa: System.Net Informacje: 0: [4480] Negocjuj System.Net Informacje: 0: [4480] NegoExtender Informacje System.Net: 0: [4480] Kerberos Informacje System.Net: 0: [4480] NTLM System.Net Informacje: 0: [4480] Schannel Informacje o systemie System.Net: 0: [4480] Microsoft Unified Security Dostawca protokołu System.Net informacje: 0: [4480] WDigest System.Net informacje: 0: [4480] TSSSP System.Net informacje: 0: [4480] PKU2U System.Net informacje: 0: [4480] CredSSP

System.Net informacje: 0: [4480] AcquireCredentialsHandle (pakiet = NTLM intencją = wychodzących, authdata = (string.empty) \ Corp \ svc_account)

System.Net informacje: 0 : [4480] InitializeSecurityContext (credential = System.Ne t.SafeFreeCredential_SECURITY, context = (null), targetName = HTTP/mysvc.mycorp.com, inFlags = Delegat, MutualAuth, Połączenie) Informacje System.Net: 0: [4480] InitializeSecurityContext (In-Buffers count = 1, Out-Buffer length = 40, return code = ContinueNeeded).

Maszyna robocza produkuje ten wyjściowe:

System.Net Informacja: 0: [3432] Połączenie # 57733168 - Empfangene Statusleiste: Wersja = 1,1, StatusCode = 401, StatusDescription = nieuprawnione. System.Net Informacje: 0: [3432] Połączenie # 57733168 - Nagłówek { Typ treści: tekst/html Serwer: Microsoft-IIS/8.0 WWW-Uwierzytelnianie: Negocjuj, NTLM X-Powered-By: ASP.NET Data: Pon., 10 sierpnia 2015 15:15:11 GMT Długość treści: 1293 } wurden empfangen. System.Net Informacje: 0: [3432] ConnectStream # 35016340 :: ConnectStream (Es wurden 1293 Bytes gepuffert.) System.Net Informacje: 0: [3432] Skojarzenie HttpWebRequest # 64062224 z ConnectStream # 35016340 Informacje System.Net: 0: [3432] Skojarzenie HttpWebRequest # 64062224 z HttpWebResponse # 64254500 System.Net Informacje: 0: [3432] Sicherheitspakete werden enumeriert: System.Net Informacje: 0: [3432] Negocjuj System.Net Informacje: 0: [3432 ] NegoExtender System.Net Informacje: 0: [3432] Kerberos System.Net Informacje: 0: [3432] NTLM System.Net Informacje: 0: [3432] Schannel System.Net Informacje: 0: [3432] Microsoft Unified Security Protocol Prov Ider System.Net informacje: 0: [3432] WDigest System.Net informacje: 0: [3432] TSSSP System.Net informacje: 0: [3432] PKU2U System.Net informacje: 0: [3432] CredSSP

System.Net informacje: 0: [3432] AcquireCredentialsHandle (pakiet = Negotiate, intencją = wychodzących, authdata = System.Net.SafeSspiAuthDataHandle) System.Net informacje: 0: [3432] InitializeSecurityContext (credential = System.Net.SafeFreeCredential_SECURITY, conte xt = (zerowy) targetName = HTTP/mysvc.mycorp.com, inFlags = delegatm MutualAuth, połączenie)

System.Net informacje: 0: [3432] InitializeSecurityContext (Anzahl von W buforach = 1, Länge von Out-Buffer = 40, zurückgegebener Code = ContinueNeeded).

Zastanawiam się, czy może to spowodować konfiguracja uszkodzonej maszyny. W tej chwili nie jestem pewien, gdzie szukać dalej.

Aktualizacja: Oto kod naszego prostego narzędzia testowego:

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

Aktualizacja 2: Mamy już potwierdzone, że ten problem występuje tylko na nowo zainstalowany Win 7 maszyn, które mają zaktualizowaną wizerunek firmy. Prawie Wygląda na to, że aktualizacja w ciągu ostatnich 2 miesięcy jest z nami.

+0

Czy mógłbyś opublikować utworzoną aplikację MCVE? –

+0

proszę bardzo, dodałem kod – hoetz

Odpowiedz

6

To jest szalone: ​​Okazuje się, jak tylko zainstalowałem .net 4.5 na maszynie z Windows 7, WebRequest zadziałał! Uważamy, że sprawcą była brakująca łatka platformy .NET 4.0, która jest wdrażana na wszystkich komputerach klienckich. Napraw swoje maszyny :)

Powiązane problemy