문제 : 내 로그에 "기본 연결이 닫혔습니다 : 전송시 예상치 못한 오류가 발생했습니다"라는 예외가 발생하고 [1 시간-4 시간]에서 임의의 시간에 OEM과 이메일 마케팅 시스템의 통합이 중단됩니다.
내 웹 사이트는 IIS 7.5.7600이 설치된 Windows Server 2008 R2에서 호스팅됩니다. 이 웹 사이트에는 많은 OEM 구성 요소와 포괄적 인 대시 보드가 있습니다. 대시 보드 내에서 iframe 솔루션으로 사용하는 이메일 마케팅 구성 요소 중 하나를 제외하고는 웹 사이트의 다른 모든 요소와 잘 작동합니다. 작동 방식은 모든 자격 증명과 함께 httpWebRequestobject를 보내고 iframe에 넣은 URL을 다시 얻습니다. 하지만 일정 시간 [1 시간-4 시간] 동안 만 작동하고 "기본 연결이 닫혔습니다 : 전송시 예기치 않은 오류가 발생했습니다"라는 예외가 발생하고 시스템이 httpWebRequest에서 URL을 가져 오려고 시도하더라도 동일한 예외로 실패합니다. 다시 작동하도록 만드는 유일한 방법은 응용 프로그램 풀을 재활용하는 것입니다. 그렇지 않으면 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`