2010-11-02 2 views
0

У меня есть приложение .NET 2.0, которое использует WSE 3.0 для совершения вызовов веб-службы через SSL. Приложение отлично работает в Windows XP после применения исправления реестра, которое объясняется here.WSE 3.0 Совместимость с Windows 7

Исправление говорит использовать значение UseScsvForTls запись DWORD вместе с ненулевым значением в следующем пути реестра отправить SCSV для сигнализации в TLS: HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL

Когда я попробуйте запустить то же приложение на компьютере Windows 7 (без какого-либо исправления реестра), я получаю следующее сообщение об ошибке:

The underlying connection was closed: An unexpected error occurred on a send.- at  System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request) 

at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request) 

at Microsoft.Web.Services3.WebServicesClientProtocol.GetResponse(WebRequest request, IAsyncResult result) 

at Microsoft.Web.Services3.WebServicesClientProtocol.GetWebResponse(WebRequest request) 

at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

Мой вопрос: есть ли исправление реестра можно использовать на Windows 7, чтобы исправить эту ошибку ? Или WSE не поддерживается в Windows 7?

+0

В интересах кого-либо еще, читающего это: WSE устарела. Лучшим решением было бы отказаться от него и использовать WCF. –

+0

Хотя я согласен с тем, что в общем мы должны переходить на WCF, я не вижу, как это решило бы эту конкретную проблему. В этом случае сервер использует старую версию SSL. Может ли WCF разрешать связь SSLv3 из коробки? – Zak

ответ

2

Оказалось, что проблема действительно похожа на проблему на XP, которая требует исправления реестра. Я использовал Wireshark для проверки запроса и ответа SSL. Итак, оказалось, что веб-служба, на которую я звонил, использует старую версию SSL (версия 3.0), которая по умолчанию не поддерживается по умолчанию в Windows 7.

Исправление состоит в том, чтобы добавить эту строку кода, чтобы заставить клиент для использования SSLv3:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;