Problema: ricevo questa eccezione "LA CONNESSIONE SOTTOSTANTE È STATA CHIUSA: SI È VERIFICATO UN ERRORE IMPREVISTO IN UN INVIO" nei miei log e sta interrompendo la nostra integrazione OEM con il nostro sistema di email marketing in tempi casuali che variano da [1 ora a 4 ore]
Il mio sito web è ospitato su un server Windows 2008 R2 con IIS 7.5.7600. Questo sito Web ha un gran numero di componenti OEM e un dashboard completo. Tutto funziona bene con tutti gli altri elementi del sito web tranne che con uno dei nostri componenti di email marketing che stiamo utilizzando come soluzione iframe all'interno della nostra dashboard. Il modo in cui funziona è che invio un httpWebRequestobject con tutte le credenziali e ricevo un URL che ho inserito in un iframe e funziona. Ma funziona solo per un po 'di tempo [1 ora - 4 ore] e poi ottengo l'eccezione seguente "LA CONNESSIONE SOTTOSTANTE È STATA CHIUSA: SI È VERIFICATO UN ERRORE IMPREVISTO IN UN INVIO" e anche se il sistema cerca di ottenere l'URL da httpWebRequest fallisce con la stessa eccezione. L'unico modo per farlo funzionare di nuovo è riciclare il pool di applicazioni o qualsiasi cosa venga modificata in web.config.
Opzione provata
Aggiunto esplicitamente, keep-alive = false
keep-alive = true
Aumentato il timeout: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Ho caricato questa pagina su un sito Web non SSL per verificare se il certificato SSL sul nostro server di produzione sta effettuando la connessione per interrompere in qualche modo.
Qualsiasi direzione verso la risoluzione è molto apprezzata.
Codice :
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`