Member 3020851 Ответов: 1

Получить 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

Спасибо за Вашу поддержку сэр,
я остановил брандмауэр, антивирус и интернет-безопасность, но все равно он не работает.

в любом случае, если это работает с вами, то это должно работать и со мной тоже. я попробую проверить еще несколько вариантов.

ZurdoDev

Кроме того, проверьте, какие заголовки вы отправляете в postman. Вы, вероятно, пропустили один.

Member 3020851

существует только один заголовок content-type = "application/json"

я попробовал использовать xml и все другие возможные значения типов контента.

ZurdoDev

Ну, что-то явно отличается, и мы не можем видеть, что вы сделали, так что вам придется сравнить и понять это.

1 Ответов

Рейтинг:
12

Member 3020851

Теперь я могу это сделать. я обновил dot net framework своего приложения с 4.5.2 до 4.6.2, и теперь он работает.

Спасибо всем вам за Вашу поддержку