В моем приложении WPF я хочу установить соединение с веб-службой через HTTPS, игнорируя возможные ошибки сертификата, что, как мне кажется, является довольно распространенным явлением из того, что я исследовал.
Я нашел этот отличный фрагмент:
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Я установил точку останова в операторе возврата, и она никогда не вызывается (пробовал тоже с отдельным методом).
IЯ также пытался установить для следующих свойств значение false:
ServicePointManager.UseNagleAlgorithm = false;
ServicePointManager.Expect100Continue = false; //tried true too
ServicePointManager.CheckCertificateRevocationList = false;
Я также пытался создать свой собственный ICertificatePolicy с CheckValidationResult, который всегда возвращает значение true и приписывает его ServicePointManager.CertificatePolicy.Это также не сработало.
Во всех этих попытках я получаю следующее:
Основное соединение было закрыто: при получении произошла непредвиденная ошибка
Я создал отдельное приложение для форм Windows всего с тремя строками:
WebReference.MySebService myWebService = new WebReference.MySebService();
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
bool result = myWebService.TestConnection();
//TestConnection is a method in my WebService that simply returns true.
И оно РАБОТАЛО.
Что еще можно попробовать?
Информация:
- Приложение WPF
- .NET 3.5
- Веб-сервис используется через отдельный класс
- Он отлично работает с обычным HTTP
- Не используется прокси
- Сбой как на сервере, так и с WS на localhost
- Те же три строки, которые выполняются в моем тестовом приложении, не будут работать в моем WPFapp
- Два экземпляра WebService абсолютно одинаковы (все свойства, включая URL)
- Попытка удаления и повторного добавления веб-ссылки, как в моих тестовых приложениях.