“La connexion sous-jacente a été fermée: Une erreur inattendue s'est produite lors de l'envoi.” Avec un Certificat SSL

Question : je reçois cette exception "LA CONNEXION sous-jacente a ÉTÉ FERMÉE: UNE ERREUR INATTENDUE s'est PRODUITE lors de l'envoi" dans mes logs et c'est la rupture de notre intégration OEM avec notre système d'email marketing à des moments aléatoires variant de [1 heure à 4 heures]

Mon site web est hébergé sur un serveur windows 2008 R2 avec IIS 7.5.7600. Ce site web a un grand nombre de composants OEM et tableau de bord très complet. Tout fonctionne bien avec tous les autres éléments de ce site, sauf avec l'un de nos e-mail marketing qui nous utilisent comme une solution iframe au sein de notre tableau de bord. La façon dont cela fonctionne est, j'ai envoyer un httpWebRequestobject avec tous les pouvoirs et je reçois une url de retour que j'ai mis dans un iframe et il fonctionne. Mais elle ne fonctionne que pour un certain temps [1 heure à 4 heures ]puis-je obtenir le ci-dessous exception "LA CONNEXION sous-jacente a ÉTÉ FERMÉE: UNE ERREUR INATTENDUE s'est PRODUITE lors de l'envoi" et même si le système tente de récupérer l'URL de la httpWebRequest il ne fonctionne pas avec la même exception. La seule façon de le faire fonctionner à nouveau est de recycler l'application de la piscine ou tout est édité dans le web.config. Je suis vraiment épuisé toutes les option que je pouvais imaginer.

Option essayé

Explicitement ajouté, keep-alive = false

keep-alive = true

Augmenté le temps : <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />

J'ai téléchargé cette page non SSL site web pour vérifier si le certificat SSL sur notre serveur de production est de rendre la connexion à supprimer certains comment.

N'importe quelle direction vers la résolution est grandement apprécié.

Code :

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`
  • Avez-vous jamais comprendre cela?
  • oui, j'ai été en mesure de le faire fonctionner avec ce code ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Ou SecurityProtocolType.Ssl3
  • J'étais sur le point de mourir pour la même question. M'a fallu plusieurs heures aux prises avec le même problème. Merci pour vous commentaires, il a sauvé ma journée.
  • vous devez ajouter votre commentaire en guise de réponse
  • Dans mon cas, l'exécution du site web dans Visual Studio 15 tout va bien, mais à la fin, parce que je ne peut pas mettre à niveau cadre dans le serveur, et de les forcer TLS 1.2 et la désactivation keep-alive ne fonctionnent pas, j'ai eu à l'installation d'un intermédiaire de du serveur web de proxy le serveur web cible que les gouttes de la connexion.