Problème: j'obtiens cette exception "LA CONNEXION SOUS-JACENTE A ÉTÉ FERMÉE: UNE ERREUR INATTENDUE SURVENUE SUR UN ENVOI" dans mes journaux et cela rompt notre intégration OEM avec notre système de marketing par e-mail à des moments aléatoires variant de [1heure à 4 heures]
Mon site Web est hébergé sur un serveur Windows 2008 R2 avec IIS 7.5.7600. Ce site Web contient un grand nombre de composants OEM et un tableau de bord complet. Tout fonctionne bien avec tous les autres éléments du site Web, à l'exception de l'un de nos composants de marketing par e-mail que nous utilisons comme solution iframe dans notre tableau de bord. La façon dont cela fonctionne est, j'envoie un httpWebRequestobject avec toutes les informations d'identification et je récupère une URL que j'ai mise dans un iframe et cela fonctionne. Mais cela ne fonctionne que pendant un certain temps [1 heure - 4 heures], puis j'obtiens l'exception ci-dessous "LA CONNEXION SOUS-JACENTE A ÉTÉ FERMEE: UNE ERREUR INATTENDUE SURVENUE SUR UN ENVOI" et même si le système essaie d'obtenir l'URL du httpWebRequest it échoue avec la même exception. La seule façon de le faire fonctionner à nouveau est de recycler le pool d'applications ou quoi que ce soit est modifié dans web.config.
Option essayée
Explicitement ajouté, keep-alive = false
keep-alive = true
Augmentation du temps mort: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
J'ai téléchargé cette page sur un site Web non SSL pour vérifier si le certificat SSL sur notre serveur de production établit la connexion pour supprimer une certaine façon.
Toute direction vers la résolution est grandement appréciée.
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`