Problem: w moich dziennikach pojawia się ten wyjątek „PODSTAWOWE POŁĄCZENIE ZOSTAŁO ZAMKNIĘTE: NIEOCZEKIWANY BŁĄD PRZY WYSYŁANIU” i powoduje to zerwanie naszej integracji OEM z naszym systemem marketingu e-mailowego w losowych odstępach czasu od [1–4 godziny]
Moja witryna jest hostowana na serwerze Windows 2008 R2 z usługami IIS 7.5.7600. Ta witryna zawiera dużą liczbę komponentów OEM i obszerny pulpit nawigacyjny. Wszystko działa dobrze ze wszystkimi innymi elementami witryny, z wyjątkiem jednego z naszych komponentów e-mail marketingu, którego używamy jako rozwiązanie iframe na naszym pulpicie nawigacyjnym. Sposób działania jest taki, że wysyłam obiekt httpWebRequestobject ze wszystkimi poświadczeniami i otrzymuję adres URL z powrotem, który umieszczam w ramce iframe i działa. Ale to działa tylko przez jakiś czas [1 godzina - 4 godziny], a potem pojawia się poniższy wyjątek „PODSTAWOWE POŁĄCZENIE ZOSTAŁO ZAMKNIĘTE: NIEOCZEKIWANY BŁĄD WYSTĄPIŁ PRZY WYSYŁANIU” i nawet jeśli system próbuje uzyskać adres URL z httpWebRequest kończy się niepowodzeniem z tym samym wyjątkiem. Jedynym sposobem na przywrócenie jej działania jest ponowne wykorzystanie puli aplikacji lub edytowanie czegokolwiek w pliku web.config.
Opcja wypróbowana
Wyraźnie dodane, keep-alive = false
keep-alive = true
Wydłużono limit czasu: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Przesłałem tę stronę do witryny bez SSL, aby sprawdzić, czy certyfikat SSL na naszym serwerze produkcyjnym nawiązuje połączenie, aby w jakiś sposób zrzucić to.
Każdy kierunek w kierunku rozwiązania jest bardzo cenny.
Kod :
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`