Проблема: я получаю это исключение. "ПОДХОДЯЩЕЕ СОЕДИНЕНИЕ БЫЛО ЗАКРЫТО: НЕОПРЕДЕЛЕННАЯ ОШИБКА ВОЗНИКНОВЕНА НА ОТПРАВЛЕНО" в моих журналах, и это нарушает нашу OEM-интеграцию с нашей электронной системой маркетинга в случайные моменты времени, начиная с [1 часа - 4 часа]
Мой сайт размещен на сервере Windows 2008 R2 с IIS 7.5.7600. На этом веб-сайте имеется большое количество OEM-компонентов и обширная панель инструментов. Все работает отлично со всеми другими элементами веб-сайта, за исключением одного из наших компонентов электронной почты, которые мы используем в качестве решения iframe на нашей информационной панели. Как это работает, я отправляю httpWebRequestobject со всеми учетными данными, и я получаю URL-адрес, который я вставляю в iframe, и он работает. Но это работает только в течение некоторого времени [1 час - 4 часа], а затем я получаю следующее исключение. "ПОДХОДЯЩЕЕ СОЕДИНЕНИЕ ЗАКРЫТО: НЕОПРЕДЕЛЕННАЯ ОШИБКА, ВОЗНИКАЮЩАЯ НА ОТПРАВИТЬ", и даже если система пытается получить URL-адрес из httpWebRequest, с тем же исключением. Единственный способ заставить его работать снова - переработать пул приложений или что-либо редактируется в 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`