401 при вызове веб-службы только на определенных машинах

Мы разработали приложение WPF с С# и используем RestSharp для связи с простым веб-сервисом, подобным этому:

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

Все отлично работало, пока мы не получили звонки, которые на некоторых компьютерах (большинство работ) приложение не может подключиться к службе. Был обработан прямой вызов метода обслуживания с помощью скрипта. Затем мы извлекли небольшое консольное приложение .net и попробовали вызов службы с помощью RestSharp и напрямую с помощью HttpWebRequest, и он снова сбой с 401. Теперь мы включили отслеживание System.Net и заметили что-то. После первого 401, что нормально, неисправная машина производит этот журнал:

Информация о System.Net: 0: [4480] Connection # 3741682 - Полученные заголовки { Подключение: Keep-Alive Контент-длина: 1293 Content-Type: text/html Дата: Пн, 10 Авг. 2015 12:37:49 GMT Сервер: Microsoft-IIS/8.0 WWW-аутентификация: переговоры, NTLM X-Powered-By: ASP.NET }. Информация о System.Net: 0: [4480] ConnectStream # 39451090:: ConnectStream (буферный 1293 байта). Информация о System.Net: 0: [4480] Связывание HttpWebRequest # 2383799 с ConnectStream # 39451090 Информация о System.Net: 0: [4480] Связывание HttpWebRequest # 2383799 с HttpWebResponse # 19515494 System.Net Information: 0: [4480] Перечисление пакетов безопасности: Информация о System.Net: 0: [4480] Информация о System.Net: 0: [4480] NegoExtender Информация о System.Net: 0: [4480] Kerberos Информация о System.Net: 0: [4480] NTLM Информация о System.Net: 0: [4480] Schannel Информация о System.Net: 0: [4480] Поставщик протокола Microsoft Unified Security Protocol Информация о System.Net: 0: [4480] WDigest Информация о System.Net: 0: [4480] TSSSP Информация о System.Net: 0: [4480] pku2u Информация о System.Net: 0: [4480] CREDSSP

Информация о System.Net: 0: [4480] AcquireCredentialsHandle (package = NTLM, намерение = исходящий, authdata = (String.Empty)\АМФ\svc_account)

Информация о System.Net: 0: [4480] InitializeSecurityContext (credential = System.Net.SafeFreeCredential_SECURITY, context = (null), targetName = HTTP/mysvc.mycorp.com, inFlags = Delegate, MutualAuth, Подключение) Информация о системе: 0: [4480] InitializeSecurityContext (In-Buffers count = 1, Out-Buffer length = 40, возвращаемый код = ContinueNeeded).

Рабочая машина производит этот вывод:

Информация о System.Net: 0: [3432] Connection # 57733168 - Empfangene Statusleiste: Version = 1.1, StatusCode = 401, StatusDescription = Unauthorized. System.Net Information: 0: [3432] Connection # 57733168 - Заголовок { Content-Type: text/html Сервер: Microsoft-IIS/8.0 WWW-аутентификация: переговоры, NTLM X-Powered-By: ASP.NET Дата: Пн, 10 авг. 2015 15:15:11 GMT Контент-длина: 1293 } wurden empfangen. Информация о System.Net: 0: [3432] ConnectStream # 35016340:: ConnectStream (Es wurden 1293 Bytes gepuffert.) Информация о System.Net: 0: [3432] Связывание HttpWebRequest # 64062224 с ConnectStream # 35016340 Информация о System.Net: 0: [3432] Связывание HttpWebRequest # 64062224 с HttpWebResponse # 64254500 Информация о System.Net: 0: [3432] Sicherheitspakete werden enumeriert: Информация о System.Net: 0: [3432] Вести переговоры Информация о System.Net: 0: [3432] NegoExtender Информация о System.Net: 0: [3432] Kerberos Информация о System.Net: 0: [3432] NTLM Информация о System.Net: 0: [3432] Schannel Информация о System.Net: 0: [3432] Поставщик протокола Microsoft Unified Security Protocol Информация о System.Net: 0: [3432] WDigest Информация о System.Net: 0: [3432] TSSSP Информация о System.Net: 0: [3432] pku2u Информация о System.Net: 0: [3432] CREDSSP

Информация о System.Net: 0: [3432] AcquireCredentialsHandle (package = Согласование, намерение = Исходящее, authdata = System.Net.SafeSspiAuthDataHandle) Информация о System.Net: 0: [3432] InitializeSecurityContext (credential = System.Net.SafeFreeCredential_SECURITY, context = (null), targetName = HTTP/mysvc.mycorp.com, inFlags = Delegate, MutualAuth, Connection)

Информация о System.Net: 0: [3432] InitializeSecurityContext (Anzahl von In-Buffers = 1, Länge von Out-Buffer = 40, zurückgegebener Code = ContinueNeeded).

Интересно, приведет ли это к какой-то конфигурации неисправной машины. На данный момент я не уверен, где искать дальше.

Обновление: Вот код нашего простого тестового инструмента:

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

Обновление 2: Мы теперь подтвердили, что эта проблема возникает только на вновь установленных машинах win 7, у которых есть обновленное корпоративное изображение. Почти похоже, что какое-то обновление за последние 2 месяца связано с нами.

Ответы

Ответ 1

Это безумие: Оказывается, как только я установил .net 4.5 на машину Windows 7, WebRequest работает! Мы считаем, что виновником стал отсутствующий патч платформы .NET 4.0, который развертывается на всех клиентских машинах. Итак, исправьте свои машины:)