Masalah: Saya mendapatkan pengecualian ini "THE UNDERLYING CONNECTION WAS CLOSED: AN UNEXPECTED ERROR OCCURRED ON A SEND" di log saya dan ini merusak integrasi OEM kami dengan sistem pemasaran email kami pada waktu acak yang bervariasi dari [1jam - 4 jam]
Situs web saya di-host di windows server 2008 R2 dengan IIS 7.5.7600. Situs web ini memiliki sejumlah besar komponen OEM dan dasbor yang komprehensif. Semuanya berfungsi dengan baik dengan semua elemen lain dari situs web kecuali dengan salah satu komponen pemasaran email kami yang kami gunakan sebagai solusi iframe di dalam dasbor kami. Cara kerjanya adalah, saya mengirim objek httpWebRequest dengan semua kredensial dan saya mendapatkan kembali url yang saya masukkan ke dalam iframe dan berfungsi. Tapi itu hanya bekerja untuk beberapa waktu [1 jam - 4 jam] dan kemudian saya mendapatkan pengecualian di bawah ini "THE UNDERLYING CONNECTION WAS CLOSED: AN UNEXPECTED ERROR OCCURRED ON A SEND" dan bahkan jika sistem mencoba untuk mendapatkan URL dari httpWebRequest itu gagal dengan pengecualian yang sama. Satu-satunya cara untuk membuatnya berfungsi kembali adalah dengan mendaur ulang kumpulan aplikasi atau apa pun yang diedit di web.config.
Opsi mencoba
Ditambahkan secara eksplisit, keep-alive = false
keep-alive = true
Meningkatkan waktu istirahat: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Saya telah mengunggah halaman ini ke situs web non SSL untuk memeriksa apakah sertifikat SSL di server produksi kami membuat koneksi untuk menjatuhkan beberapa caranya.
Segala arah menuju resolusi sangat dihargai.
Kode:
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`