Проблема: я отримую цей виняток: "НЕЗАДАЧНА ПІДТРИМКА ЗАКРИТАЄТЬСЯ: НЕОЧАКОВАНА ПОМИЛКА ВІДКРИТИ НАДІСЛЕННЯ" в моїх журналах, і це порушує нашу інтеграцію OEM з нашою системою маркетингу електронної пошти у випадкові часи, що змінюються від [1 година - 4 години]
Мій веб-сайт розміщений на сервері Windows 2008 R2 з IIS 7.5.7600. На цьому веб-сайті є велика кількість компонентів OEM та всеосяжна інформаційна панель. Все добре працює з усіма іншими елементами веб-сайту, за винятком одного з компонентів маркетингу електронної пошти, який ми використовуємо як рішення iframe на нашій панелі приладів. Як це працює, я надсилаю httpWebRequestobject з усіма обліковими записами, і я отримую URL-адресу, яку я вкладаю в iframe, і вона працює. Але це працює лише деякий час [1 годину - 4 години], і тоді я отримую нижченаведене виняток: "НЕВЕРДІЛЬНЕ ПІДТРИМКА ЗАКРИТО: НЕОЧАКОВАНА ПОМИЛКА ВІДКРИТИ НАДІСЛЕНО", і навіть якщо система намагається отримати URL-адресу від httpWebRequest it не вдається за тим же винятком. Єдиний спосіб змусити його знову працювати - це переробити пул додатків або що-небудь відредагувати в web.config.
Варіант спробували
Явно додано, keep-alive = false
keep-alive = true
Збільшено час очікування: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Я завантажив цю сторінку на веб-сайт, що не належить до 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`