У меня есть приложение, написанное на VB.NET (НЕ asp.net, это консольное приложение Windows). Я пытаюсь вызвать URL-адрес (html-страницу) и вернуть ответ в строку. Ответ представляет собой прямой JSON, без каких-либо html-тегов. Он открывается с помощью {
и закрывается с помощью }
.
Я отлично создаю объект HttpWebRequest. Затем позвоните req.GetResponse()
. Как только я это делаю, я получаю сообщение об ошибке The underlying connection was closed: The connection was closed unexpectedly.
. Я гуглил и проверял stackoverflow и пробовал все, что нашел, что применимо (многое из этого связано с конфигурациями службы WCF, которые не применяются).
Вот мой код:
Public Function GetJSON(ByRef d As db.Device) As Boolean
Try
d.Url = "http://" & d.IpAddress & ini.doc.<svc>.<url>.Value
Dim req As HttpWebRequest = HttpWebRequest.Create(d.Url)
// req.Accept = "*/*"
// req.Timeout = 30000
// req.ReadWriteTimeout = 30000
// req.KeepAlive = False
// req.UseDefaultCredentials = True
// req.CachePolicy = HttpWebRequest.DefaultCachePolicy
// req.Proxy = HttpWebRequest.DefaultWebProxy
// req.ProtocolVersion = New System.Version(1, 0)
Dim rsp As HttpWebResponse = req.GetResponse()
Return True
Catch ex As Exception
Log(ex.Message)
Return False
Finally
rsp = Nothing
req = Nothing
End Try
End Function
Закомментированные строки (неправильный стиль комментария, но поэтому SO разберет его правильно) - это все, что я пробовал до сих пор, основываясь на том, что я нашел в Интернете. Ни один из них не исправил. Я проверил правильность создаваемого URL-адреса; если я вызываю точно такой же URL в своем браузере, он возвращает точно ожидаемый ответ.
Я пробовал использовать wireshark... и я вижу, что фактически ожидаемые, полные данные возвращаются в выводе акулы, а затем несколько строк, а затем красная строка, которая говорит: http > 51943 [RST] Seq=1607 Win=0 Len=0
, которая является последней строкой, отображаемой перед . NET выдает ошибку.
Я также попытался включить System.Net
трассировку/регистрацию для каждого сообщения здесь, на SO, и в выходном файле я вижу, что все ожидаемые данные JSON действительно возвращаются, но после того, как они возвращаются, они выбрасывают эти строки в журнале трассировки .NET:
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 1605#1605
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Receive()
System.Net.Sockets Verbose: 0 : [7040] Data from Socket#60467532::Receive
System.Net.Sockets Verbose: 0 : [7040] 00000000 : :
System.Net.Sockets Verbose: 0 : [7040] Exiting Socket#60467532::Receive() -> 0#0
System.Net.Sockets Verbose: 0 : [7040] Socket#60467532::Dispose()
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816:: - The underlying connection was closed: The connection was closed unexpectedly.
System.Net Error: 0 : [7040] Exception in the HttpWebRequest#27806816::GetResponse - The underlying connection was closed: The connection was closed unexpectedly.
Любые идеи, куда идти дальше, чтобы попытаться понять это? Мы считываем эти данные с некоторых сенсорных устройств для мониторинга окружающей среды, и они дали нам этот URL для использования.
Две вещи, которые меня действительно заводят и смущают, заключаются в следующем:
а) он отлично работает при вызове в браузере
б) трассировка WireShark и .NET показывает все данные на самом деле ЯВЛЯЕТСЯ возвращается, и фреймворк по какой-то причине исключает ПОСЛЕ получения всех данных!
Само WebException используется очень мало, так как его InnerException имеет значение null, а его статус просто говорит «ConnectionClosed {8}».
Заранее спасибо!!!
ОБНОВЛЕНИЕ 18/08 1130: я также попытался использовать только System.Net.WebRequest
вместо HttpWebRequest
. Это тоже не имело никакого значения.
ОБНОВЛЕНИЕ 18/08 1222: я только что попытался переключить свой код вместо использования [Http]Web[Request|Response]
на затемнение объекта WebClient
и использовать его метод DownloadString()
. Однако это также выдает точно такую же ошибку.
ОБНОВЛЕНИЕ 18/08 1230: Пробовал использовать My.Computer.Network.DownloadFile()
- также получил ту же ошибку закрытия соединения.