【问题标题】:SOAP Error: The request was aborted: Could not create SSL/TLS secure channelSOAP 错误:请求被中止:无法创建 SSL/TLS 安全通道
【发布时间】:2018-03-15 10:07:07
【问题描述】:

我已经使用 WSDL 文件创建了 Soap 服务。 在对 SOAP UI(带有传递标头和客户端 ID、秘密的 XML 部分)进行测试时,它给出了正确的响应。但是通过服务给出错误

请求中止:无法创建 SSL/TLS 安全通道

有人可以分析代码吗 我的服务看起来像:

    Dim Request As WebRequest
    Dim Response As WebResponse
    Dim DataStream As Stream
    Dim Reader As StreamReader
    Dim SoapByte() As Byte
    Dim pSuccess As Boolean = True
    Dim SD2Request As String

    SoapByte = System.Text.Encoding.UTF8.GetBytes(MyXMLString)

        Dim myCred As System.Net.CredentialCache = New System.Net.CredentialCache()
        Dim netCred As NetworkCredential = New NetworkCredential("testclient", "test@123")
        myCred.Add(New Uri("https://URL"), "Basic", netCred)
        Request = WebRequest.Create("https://URL")
        Request.Headers.Add("Client-ID", "ID-1234")
        Request.Headers.Add("Client-Secret", "Secret-1234")
        Request.PreAuthenticate = True
        Request.ContentType = "application/xml; charset=utf-8"
        Request.ContentLength = SoapByte.Length
        Request.Method = "POST"
        Request.Credentials = myCred
        DataStream = Request.GetRequestStream()
        DataStream.Write(SoapByte, 0, SoapByte.Length)
        DataStream.Close()
        Response = Request.GetResponse()
        DataStream = Response.GetResponseStream()
        Reader = New StreamReader(DataStream)
        SD2Request = Reader.ReadToEnd()
        DataStream.Close()
        Reader.Close()
        Response.Close()
        Return SD2Request

我已导入 WSDL 文件作为服务参考。

【问题讨论】:

  • 您的目标是哪个 .NET Framework 版本?
  • @VisualVincent 目标 .Net Framework 版本为 4.5

标签: vb.net web-services ssl soap wsdl


【解决方案1】:

.NET 4.5 默认没有启用 TLS。您必须通过设置 System.Net.ServicePointManager.SecurityProtocol property 手动启用它:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12

【讨论】:

  • 我已经尝试过手动传递安全协议并更改目标框架,但错误仍然存​​在。
  • @LokeshChinchkhedkar :您是否确认不是网站返回 HTTP 代码 401?见:stackoverflow.com/a/25391935
  • 我检查了服务,它返回 200 作为响应。我认为问题在于身份验证和客户端 ID 以及秘密传递。是否有任何其他方式来传递它,因为 Iine 上出现错误:Request.GetRequestStream()。
  • @LokeshChinchkhedkar :发生错误是因为它无法建立正确的 HTTPS 连接。它与您发送到服务器的数据无关。问题是很难确定此错误的原因。它可能是从无效的服务器证书到代码中的不兼容(后者通常需要进行微小更改,如果您能找出原因的话)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2018-04-22
  • 2012-10-30
相关资源
最近更新 更多