身份验证失败,因为远程方在从Web服务获取响应时已关闭传输流异常

时间:2016-02-25 08:12:14

标签: c# web-services windows-authentication httpwebresponse

我正在呼叫第三方服务,当我要求回复时,它会抛出一个说明

的异常
  

“身份验证失败,因为远程方已关闭传输流异常”。

我认为发送凭据存在问题。我甚至尝试过提供新的凭据。这是完整的代码

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

enter image description here

2 个答案:

答案 0 :(得分:91)

我找到答案,这是因为我们调用的第三方Web服务不支持TLS 1.0,他们支持1.1和1.2。所以我不得不改变安全协议。

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

答案 1 :(得分:0)

我有一个限制,即仅使用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,因此也不允许进行此设置。希望这会有所帮助!