Получить API-интерфейс REST работает с почтальоном, но дает ошибку приложения VB.NET
У меня есть REST API, установленный в облаке Azure .
он дает ответ от браузера, а также хорошо работает с почтальоном, но не дает ответа от моего vb.net применение.
это просто дает исключение "Базовое соединение было закрыто: произошла непредвиденная ошибка при отправке."
более того тот же API работает на другом веб сервере но не работает в облаке Azure
мои коды как как под,
Dim URL As String URL = txtBookingURL.Text & "/api/values" Dim objWebRequest As Net.HttpWebRequest Dim objWebResponse As Net.HttpWebResponse Dim srReader As IO.StreamReader Dim strHTML As String objWebRequest = CType(Net.WebRequest.Create(URL), Net.HttpWebRequest) objWebRequest.Method = "GET" objWebRequest.ContentType = "application/json" objWebRequest.Credentials = CredentialCache.DefaultCredentials objWebRequest.Accept = "application/json" Dim response As HttpWebResponse Try response = objWebRequest.GetResponse() ' gives exception on this line objWebResponse = CType(response, Net.HttpWebResponse) srReader = New IO.StreamReader(objWebResponse.GetResponseStream) strHTML = srReader.ReadToEnd objWebResponse.Close() objWebRequest.Abort() txtReceived.Text = strHTML Catch ex As Exception txtReceived.Text = ex.Message End Try
Что я уже пробовал:
я пробовал использовать webclient и restsharp также но та же ошибка
Richard Deeming
Отладьте свой код и изучите исключение. Вероятно, существует внутреннее исключение с более подробной информацией о фактической ошибке.
Если нет, настройте трассировку сети для вашего приложения и проверьте выходные данные на наличие подсказок:
Как настроить трассировку сети | Microsoft Docs[^]
Member 3020851
ниже приводится подробное исключение
System.Net.WebException: базовое соединение было закрыто: произошла непредвиденная ошибка при отправке. ---> System.IO.IOException: невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом. ---> System.Net.Sockets.SocketException: существующее соединение было принудительно закрыто удаленным хостом
в System.Net.Sockets.Разъем.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
в System.Net.Sockets.NetworkStream.Read(буфер байт [], смещение Int32, размер Int32)
--- Конец внутренней трассировки стека исключений ---
в System.Net.Sockets.NetworkStream.Read(буфер байт [], смещение Int32, размер Int32)
в System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count)
в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(сообщение ProtocolToken, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
в System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
в System.Net.TlsStream.CallProcessAuthentication(состояние объекта)
в системе.Нарезание резьбы.Параллельном режиме.RunInternal(параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.Параллельном режиме.Выполнения(в параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта, логическое preserveSyncCtx)
в системе.Нарезание резьбы.Параллельном режиме.Выполнения(в параллельном режиме параллельном режиме, ContextCallback обратного вызова, состояние объекта)
в System.Net.TlsStream.ProcessAuthentication(результат LazyAsyncResult)
в System.Net.TlsStream.Запись(байтовый буфер [], смещение Int32, размер Int32)
в System.Net.PooledStream.Запись(байтовый буфер [], смещение Int32, размер Int32)
в System.Net.ConnectStream.WriteHeaders(логическое асинхронного)
--- Конец внутренней трассировки стека исключений ---
в System.Net.HttpWebRequest.GetResponse()
в testCornAPI.Form1.Button1_Click(отправитель объекта, EventArgs e) в E:\mssource2018\mssource\CornAPI\testCornAPI\testCornAPI_200424\testCornAPI\Form1.vb:line 55
я попробовал добавить следующее и проверил со всеми протоколами TTL до ssl3
Servicepointmanager и.SecurityProtocol = SecurityProtocolType.Ssl3
но каждый раз одно и то же исключение.
мои коды работают, если я помещаю тот же API на другой веб-сервер с https, но он не работает на azure
ниже приведена полная ссылка
https://cornapi.azurewebsites.net/api/values
Пожалуйста, предложите, если это возможно, спасибо
Richard Deeming
Ваш код отлично работает для меня и возвращается:
["value1","value2"]
Должно быть, что - то еще мешает-может быть, здесь замешан брандмауэр?
Member 3020851
Спасибо за Вашу поддержку сэр,
я остановил брандмауэр, антивирус и интернет-безопасность, но все равно он не работает.
в любом случае, если это работает с вами, то это должно работать и со мной тоже. я попробую проверить еще несколько вариантов.
0x01AA
Может быть, что - то вроде этого: vb.net - получение "базовое соединение было закрыто: произошла непредвиденная ошибка при отправке" на GetReponse (), но не через браузер - переполнение стека[^]
ZurdoDev
Кроме того, проверьте, какие заголовки вы отправляете в postman. Вы, вероятно, пропустили один.
Member 3020851
существует только один заголовок content-type = "application/json"
я попробовал использовать xml и все другие возможные значения типов контента.
ZurdoDev
Ну, что-то явно отличается, и мы не можем видеть, что вы сделали, так что вам придется сравнить и понять это.