問題:ログにこの例外「基になる接続が閉じられました:送信時に予期しないエラーが発生しました」が発生し、[1時間-4時間]からランダムに変化するときに、OEMと電子メールマーケティングシステムの統合が壊れています。
私のWebサイトは、IIS 7.5.7600を搭載したWindowsサーバー2008 R2でホストされています。このWebサイトには、多数のOEMコンポーネントと包括的なダッシュボードがあります。ダッシュボード内のiframeソリューションとして使用しているメールマーケティングコンポーネントの1つを除き、すべてがWebサイトの他のすべての要素で正常に機能します。それが機能する方法は、すべての資格情報を使用してhttpWebRequestオブジェクトを送信し、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 Webサイトにアップロードして、本番サーバーの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`