Vấn đề: Tôi nhận được ngoại lệ này "KẾT NỐI DƯỚI ĐÂY ĐÃ ĐÓNG CỬA: LỖI KHÔNG PHÁT HIỆN ĐƯỢC THÀNH CÔNG KHI GỬI" trong nhật ký của tôi và nó đang phá vỡ sự tích hợp OEM của chúng tôi với hệ thống tiếp thị qua email của chúng tôi vào những thời điểm ngẫu nhiên thay đổi từ [1 giờ - 4 giờ]
Trang web của tôi được lưu trữ trên máy chủ windows 2008 R2 với IIS 7.5.7600. Trang web này có một số lượng lớn các thành phần OEM và bảng điều khiển toàn diện. Mọi thứ hoạt động tốt với tất cả các yếu tố khác của trang web ngoại trừ một trong các thành phần tiếp thị qua email của chúng tôi mà chúng tôi đang sử dụng như một giải pháp iframe trong bảng điều khiển của chúng tôi. Cách hoạt động của nó là, tôi gửi một httpWebRequestobject với tất cả thông tin đăng nhập và tôi nhận lại được một url mà tôi đã đặt trong iframe và nó hoạt động. Nhưng nó chỉ hoạt động trong một khoảng thời gian [1 giờ - 4 giờ] và sau đó tôi nhận được ngoại lệ dưới đây "KẾT NỐI DƯỚI ĐÂY ĐÃ ĐƯỢC ĐÓNG CỬA: MỘT LỖI KHÔNG PHÁT HIỆN ĐƯỢC PHÁT HIỆN TRÊN GỬI" và ngay cả khi hệ thống cố gắng lấy URL từ httpWebRequest nó không thành công với cùng một ngoại lệ. Cách duy nhất để làm cho nó hoạt động trở lại là tái chế nhóm ứng dụng hoặc bất kỳ thứ gì được chỉnh sửa trong web.config.
Tùy chọn đã thử
Đã thêm rõ ràng, keep-alive = false
keep-alive = true
Tăng thời gian chờ: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Tôi đã tải trang này lên một trang web không có SSL để kiểm tra xem chứng chỉ SSL trên máy chủ sản xuất của chúng tôi có đang thực hiện kết nối để giảm một số cách hay không.
Bất kỳ hướng giải quyết nào đều được đánh giá rất cao.
Mã:
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`