Http-запрос выдает ошибку «Отказано в подключении» с фактического устройства в xamarine

#c# #rest #xamarin #httprequest

#c# #остальное #xamarin #httprequest

Вопрос:

Я запускаю приложение xamarin на реальном устройстве и получаю Connection Refused ошибку при выполнении http-запроса.

Примечание: http-запрос работает, когда я использую эмулятор

Я попробовал следующее в качестве базового URL-адреса: http://127.0.0.1:62597 / , http://localhost:62597/

Я также добавил требовать разрешения для Интернета из манифеста Android. решение-> свойства-> Вкладка манифеста Android. Однако я заметил одну вещь: при запуске приложения на устройстве оно не запрашивает никаких разрешений… Я новичок в этом, поэтому любая помощь очень ценится. Спасибо

и это трассировка стека:

 at System.Net.Http.ConnectHelper.ConnectAsync (System.String host, System.Int32 port, System.Threading.CancellationToken cancellationToken) [0x00180] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/ConnectHelper.cs:84 
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813 
  at System.Net.Http.HttpConnectionPool.CreateConnectionAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x000ea] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:371 
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813 
  at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync (System.Threading.Tasks.ValueTask`1[TResult] creationTask) [0x000a2] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:529 
  at System.Threading.Tasks.ValueTask`1[TResult].get_Result () [0x0001b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Threading/Tasks/ValueTask.cs:813 
  at System.Net.Http.HttpConnectionPool.SendWithRetryAsync (System.Net.Http.HttpRequestMessage request, System.Boolean doRequestAuth, System.Threading.CancellationToken cancellationToken) [0x0003f] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/HttpConnectionPool.cs:284 
  at System.Net.Http.RedirectHandler.SendAsync (System.Net.Http.HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) [0x00070] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/SocketsHttpHandler/RedirectHandler.cs:32 
  at System.Net.Http.HttpClient.FinishSendAsyncBuffered (System.Threading.Tasks.Task`1[TResult] sendTask, System.Net.Http.HttpRequestMessage request, System.Threading.CancellationTokenSource cts, System.Boolean disposeCts) [0x0017e] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/System.Net.Http/src/System/Net/Http/HttpClient.cs:506 
  at Artvertise.Services.RestHelperExtensions.MakeArtPost[TResponseModel] (Artvertise.Services.ArtClient client, System.String route, System.Object data, Artvertise.Services.ContentType contentType) [0x000c5] in C:UsersagundsourcereposArtvertiseArtvertiseServicesRestHelperExtensions.cs:82 
  

Комментарии:

1. localhost это псевдоним 127.0.0.1 , обозначающий текущее устройство. Устройство запрашивает устройство, но ваш API не запускается (я думаю) на устройстве. Где запущен API? На вашем компьютере в Visual Studio debug?

2. Используйте IP-адрес компьютера вместо 127.0.0.1 (loopback) или localhost. На некоторых компьютерах localhost установлен в loopback, а на других — в IP-адрес компьютера. Таким образом, переключение с обратной связи на локальный хост приводит к тем же плохим результатам.

3. Формы webapp и xamarin находятся под одним и тем же решением, и я щелкаю правой кнопкой мыши по основному решению -> Свойства и выберите запустить несколько проектов, а затем выберите веб-приложение и Android. При использовании эмулятора я просто меняю базовый URL на 10.0.2.2: 62597

4. @jdweng но веб-приложение работает на локальном хосте, на что вы ссылаетесь, говоря «адрес компьютера»?

5. IP-адрес компьютера. Библиотека net выдает ошибки, когда клиент использует адрес обратной связи 127.0.0.1 с методом Connect.

Ответ №1:

http-запрос работает, когда я использую эмулятор

Это работает, потому что эмулятор запущен на рабочем столе и использует ту же сетевую среду, что и dessktop. При использовании localhost, а не 127.0.0.1, он автоматически найдет веб-сервер.

Однако при запуске на физическом устройстве их сетевая среда отличается. Вам необходимо указать IP-адрес рабочего стола. Поэтому, если использовать IP-адрес для эмулятора, также будет работать. Например: https://192.168.1.15:62597/

Шаги решения:

Во-первых, вам нужно убедиться, что ваш рабочий стол и телефон подключены к одному и тому же WiFi (или любой другой локальной сети),

Затем используйте IP-адрес вашего рабочего стола, назначенный маршрутизатором (не localhost, а не 127.0.0.1).

Как узнать IP-адрес вашего рабочего стола:

  • введите в командной строке ipconfig (Windows)
  • там будет куча IP-адресов
  • попробуйте все из них (кроме упомянутых localhost и 127.0.0.1)

Например, следующий снимок экрана — это мой IP-адрес моего рабочего стола:

введите описание изображения здесь

Комментарии:

1. Это не давало мне покоя всю ночь, и я думал о том же, что и то, что вы опубликовали. Я думаю, что ваше решение будет работать. Я постараюсь и дам вам знать! Спасибо