Ошибка аутентификации, поскольку удаленная сторона закрыла исключение транспортного потока при получении ответа от веб-службы

Я звоню в стороннюю службу, и когда я спрашиваю ответ, он выдает исключение, которое говорит

Msgstr "Проверка подлинности не удалась, потому что удаленная сторона закрыла исключение транспортного потока".

Я думаю, что есть проблема с отправкой учетных данных. Я даже пытался предоставить новые учетные данные. Вот полный код

string get_url = "https://**.*******.com/com/******/webservices/public_webservice.cfc?wsdl&Method=CreateUser&SiteID=**&WSPassword=******&UserName=******";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(get_url);
request.MaximumAutomaticRedirections = 4;
request.MaximumResponseHeadersLength = 4;
request.Credentials = CredentialCache.DefaultCredentials;
//request.UseDefaultCredentials = false;
//request.Credentials = new System.Net.NetworkCredential("*****", "*****");
request.ContentType = "application/x-www-form-urlencoded; charset=ISO-8859-1";

// Show the sent stream
//lbl_send_stream.Text = send_stream;
//lbl_send_stream.Text = get_url;
// Get UserId And LoginToken From Third Party DB
// ==============================================
//Exception gets throwed When code hits here
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

введите описание изображения здесь

3 ответа

Решение

Я нашел ответ, потому что сторонний веб-сервис, который мы вызывали, не поддерживал TLS 1.0, он поддерживал 1.1 и 1.2. Поэтому мне пришлось изменить протокол безопасности.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

У меня такая же проблема, сначала я изменил протокол безопасности, но он не сработал, затем я понимаю, что мне нужно изменить протокол безопасности перед созданием WebRequest:

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
        WebRequest request = WebRequest.Create(fullURL);
        request.Headers = requestHeaders;
        byte[] Bytes = System.Text.Encoding.ASCII.GetBytes(jsonData);

У меня было ограничение на использование только TLS 1.2, и, более всего, адрес ресурса (URL/ адрес) был локальным. Итак, приведенное выше решение не сработало для меня. После тщательного анализа web.config я попытался использовать<bypasslist> для локальных URL и случилось чудо!

<system.net>
    <defaultProxy>
      <proxy usesystemdefault="false" proxyaddress="<yourproxyaddress>" bypassonlocal="true" />
      <bypasslist>  
        <add address="[a-z]+\.abcd\.net\.au$" />  
      </bypasslist>
    </defaultProxy>
</system.net>

Обратите внимание, я уже использовал <proxy>настройка доступа к другим внешним URL-адресам, поэтому отсутствие этой настройки также было запрещено. Надеюсь это поможет!

Другие вопросы по тегам