当前位置: 首页 > 知识库问答 >
问题:

“基础连接已关闭:发送时发生意外错误。”使用SSL证书

庄高谊
2023-03-14

我得到这个例外

基础连接已关闭:发送时发生意外错误。

在我的日志中,它正在随机打破我们的OEM与电子邮件营销系统的集成。(1-4小时不等)

我的网站托管在Windows Server 2008 R2与IIS 7.5.7600。

该网站拥有大量OEM组件和全面的仪表板。除了我们的一个电子邮件营销组件(我们正在使用该组件作为仪表板中的iframe解决方案)外,其他所有内容都可以与网站的所有其他元素配合使用。

它的工作方式是,我发送一个带有所有凭据的HttpWebRequest对象,然后我得到一个网址,我把它放在一个iframe中,它就可以工作了。

但它只工作一段时间(1-4小时),然后从呼叫到

Web请求。获取响应();

我有个例外

基础连接已关闭:发送时发生意外错误。

即使系统尝试从httpWebRequest获取URL,也会失败,出现相同的异常。

让它再次发挥作用的唯一方法是:

  • 回收应用程序池
  • 任何东西都在web.config.编辑

我真的用尽了我能想到的所有选择。

明确添加

>

  • keep alive=false

    keep alive=true

    增加了超时时间:

    我已将此页面上载到一个非SSL网站,以检查我们生产服务器上的SSL证书是否正在建立连接以删除某些内容。

    任何解决方案的方向都是值得赞赏的。

    
        Public Function CreateHttpRequestJson(ByVal url) As String
            Try
                Dim result As String = String.Empty
                Dim httpWebRequest = DirectCast(WebRequest.Create("https://api.xxxxxxxxxxx.com/api/v3/externalsession.json"), HttpWebRequest)
                httpWebRequest.ContentType = "text/json"
                httpWebRequest.Method = "PUT"
                httpWebRequest.ContentType = "application/x-www-form-urlencoded"
                httpWebRequest.KeepAlive = False
                'ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
    
                'TODO change the integratorID to the serviceproviders account Id, useremail 
                Using streamWriter = New StreamWriter(httpWebRequest.GetRequestStream())
                    Dim json As String = New JavaScriptSerializer().Serialize(New With { _
                    Key .Email = useremail, _
                    Key .Chrome = "None", _
                    Key .Url = url, _
                    Key .IntegratorID = userIntegratorID, _
                    Key .ClientID = clientIdGlobal _
                    })
    
                    'TODO move it to the web.config, Following API Key is holonis accounts API Key
                    SetBasicAuthHeader(httpWebRequest, holonisApiKey, "")
                    streamWriter.Write(json)
                    streamWriter.Flush()
                    streamWriter.Close()
    
                    Dim httpResponse = DirectCast(httpWebRequest.GetResponse(), HttpWebResponse)
                    Using streamReader = New StreamReader(httpResponse.GetResponseStream())
                        result = streamReader.ReadToEnd()
                        result = result.Split(New [Char]() {":"})(2)
                        result = "https:" & result.Substring(0, result.Length - 2)
                    End Using
                End Using
                Me.midFrame.Attributes("src") = result
            Catch ex As Exception
                objLog.WriteLog("Error:" & ex.Message)
                If (ex.Message.ToString().Contains("Invalid Email")) Then
                    'TODO Show message on UI
                ElseIf (ex.Message.ToString().Contains("Email Taken")) Then
                    'TODO Show message on UI
                ElseIf (ex.Message.ToString().Contains("Invalid Access Level")) Then
                    'TODO Show message on UI
                ElseIf (ex.Message.ToString().Contains("Unsafe Password")) Then
                    'TODO Show message on UI
                ElseIf (ex.Message.ToString().Contains("Invalid Password")) Then
                    'TODO Show message on UI
                ElseIf (ex.Message.ToString().Contains("Empty Person Name")) Then
                    'TODO Show message on UI
                End If
            End Try
        End Function
      
    
        Public Sub SetBasicAuthHeader(ByVal request As WebRequest, ByVal userName As [String], ByVal userPassword As [String])
            Dim authInfo As String = Convert.ToString(userName) & ":" & Convert.ToString(userPassword)
            authInfo = Convert.ToBase64String(Encoding.[Default].GetBytes(authInfo))
            request.Headers("Authorization") = "Basic " & authInfo
        End Sub
    

  • 共有3个答案

    郎德馨
    2023-03-14

    下面的代码解决了这个问题

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Ssl3
    
    段干瑞
    2023-03-14

    如果你被困住了。Net 4.0,而目标站点使用的是TLS1.2,则需要以下行<代码>服务点管理器。SecurityProtocol=(SecurityProtocolType)3072

    资料来源:TLS 1.2和。NET支持:如何避免连接错误

    郎宏逸
    2023-03-14

    对我来说,这是tls12:

    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    
     类似资料:
    • 这是我用来调用web API的代码。通过浏览器调用web api工作正常。

    • 所以我正试图用SMTP和AWS向我自己发送电子邮件。我在配置中使用的电子邮件经过验证,因为我仍然在SES中使用沙盒模式。在运行脚本时,我不断收到错误即使我尝试与OpenSSL连接,但它已连接,但显示

    • 我试图连接使用JDBC MySQL驱动程序,但它不会工作。就我目前而言,我已经正确地遵循了每一步,并且MySQL驱动程序有蓝色的复选标记。我用的是Windows7。下面是我对错误的堆栈跟踪: ExecutionException:java.lang.runtimeException:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信

    • 但结果显示相同。有人能帮忙吗? 提前感谢S.K Setia

    • 我试图将我的Spring Boot应用程序连接到PostGresSql数据库。但每次我得到错误。 我的文件如下所示:- ssl服务器。jks文件位于src/main/resources文件夹中。我正在阅读下面的控制台台面:-

    • 我试图用下面的连接字符串连接到SQL服务器,但它给出了这个"错误连接超时过期" 我已尝试telnet,并且它已成功连接。但是,根据代码,即使我尝试指定默认端口,也无法连接。 我有做错什么吗?提前谢谢你。 Telnet结果