Sorun: Günlüklerimde "ANA BAĞLANTI KAPATILDI: BİR GÖNDERİMDE BEKLENMEYEN BİR HATA OLUŞTURULDU" şeklinde bir istisna alıyorum ve [1 saat - 4 saat] arasında değişen rastgele zamanlarda OEM entegrasyonumuzu e-posta pazarlama sistemimizle bozuyor
Web sitem, IIS 7.5.7600 ile bir Windows sunucusu 2008 R2'de barındırılıyor. Bu web sitesinde çok sayıda OEM bileşeni ve kapsamlı bir kontrol paneli vardır. Kontrol panelimizde iframe çözümü olarak kullandığımız e-posta pazarlama bileşenimizden biri dışında her şey web sitesinin diğer tüm öğeleriyle iyi çalışıyor. İşleyiş şekli, tüm kimlik bilgileriyle birlikte bir httpWebRequestobject gönderiyorum ve bir iframe'e koyduğum bir url geri alıyorum ve çalışıyor. Ancak yalnızca belirli bir süre [1 saat - 4 saat] çalışır ve ardından aşağıdaki istisnayı alıyorum: "ANA BAĞLANTI KAPATILDI: BİR GÖNDERİMDE BEKLENMEYEN BİR HATA OLUŞTU" ve sistem URL'yi httpWebRequest'ten almaya çalışsa bile aynı istisna ile başarısız olur. Tekrar çalışmasını sağlamanın tek yolu uygulama havuzunu geri dönüştürmektir veya herhangi bir şey web.config dosyasında düzenlenir.
Seçenek denendi
Açıkça eklendi, keep-alive = false
keep-alive = true
Zaman aşımını artırdı: <httpRuntime maxRequestLength="2097151" executionTimeout="9999999" enable="true" requestValidationMode="2.0" />
Üretim sunucumuzdaki SSL sertifikasının bağlantı kurup kurmadığını kontrol etmek için bu sayfayı SSL olmayan bir web sitesine yükledim.
Çözüme yönelik herhangi bir yön büyük beğeni topluyor.
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`