У меня есть странная проблема, когда мое приложение пытается выполнить HTTP HTTP-запрос для вызова API. Как правило, это проходит без проблем, однако, если пользователь берет свой ноутбук домой и подключается через свою домашнюю сеть, затем спящий режим с машиной и возвращается на работу на следующий день, HTTPWebRequest терпит неудачу либо с ошибкой тайм-аута, либо просто с тем, что URL-адрес не может быть достигнуто. Как только они перезагружают ноутбук, соединение, как правило, снова отлично.httpWebRequest тайм-аут/неудачное соединение после спящего режима и сетей коммутации ноутбуков
Я провел много дней, пытаясь выяснить, что может быть причиной этого, таких как проблемы с прокси-соединением или проблемы с сетевой картой в ноутбуке, но пока не удалось установить диагностику или исправление.
У кого-нибудь есть предложения по поводу того, что может быть проблемой, или как я могу лучше диагностировать это?
Код:
Private Function WRequestMainDynamic(URL As String, method As String, POSTdata As String, timeout As Integer, Optional ByRef proxyType As Integer = 0)
Dim responseData As String = ""
Dim hwrequest As Net.HttpWebRequest = Nothing
Dim postByteArray() As Byte = Nothing
Dim connectionSuccess As Boolean = False
Dim count As Integer = 0
While connectionSuccess = False And count < 6
Try
hwrequest = Net.WebRequest.Create(URL)
hwrequest.Accept = "*/*"
hwrequest.AllowAutoRedirect = True
hwrequest.UserAgent = "http_requester/0.1"
hwrequest.Timeout = timeout
hwrequest.Method = method
hwrequest.KeepAlive = True
Select Case proxyType
Case 0
hwrequest.Proxy = Nothing
Case 1
'don't set anything
Case 2
hwrequest.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials
Case Else
hwrequest.Proxy = Nothing
End Select
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Ssl3
ServicePointManager.Expect100Continue = False
If hwrequest.Method = "POST" Then
hwrequest.ContentType = "application/json"
Dim encoding As New Text.UTF8Encoding() 'Use UTF8Encoding for XML requests
postByteArray = encoding.GetBytes(POSTdata)
hwrequest.ContentLength = postByteArray.Length
Using postStream As IO.Stream = hwrequest.GetRequestStream()
postStream.Write(postByteArray, 0, postByteArray.Length)
End Using
End If
Using hwresponse As Net.HttpWebResponse = hwrequest.GetResponse()
If hwresponse.StatusCode = Net.HttpStatusCode.OK Then
Using responseStream As IO.StreamReader = New IO.StreamReader(hwresponse.GetResponseStream())
responseData = responseStream.ReadToEnd()
End Using
End If
End Using
connectionSuccess = True
Catch webex As WebException
If webex.Status = WebExceptionStatus.Timeout Then
Throw
Else
proxyType += 1
If proxyType = 3 Then proxyType = 0
count += 1
If count = 6 Then Throw
End If
Catch e As Exception
Throw
responseData = ""
Finally
postByteArray = Nothing
hwrequest = Nothing
GC.Collect()
End Try
End While
Используйте функции ведения журнала system.net (http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html), чтобы узнать, к какому серверу он пытается подключиться после спящего режима. – feroze
Спасибо, как я могу добавить/интегрировать этот файл конфигурации с моим приложением (проект надстройки Outlook), у меня есть файл app.config, это где я должен добавить его? – moatak787
Да, добавьте его в файл app.config для вашего контроля. – feroze