Как отладить приложение Xamarin iOS, использующее localhost asp.net core API

#xamarin #xamarin.forms #.net-core

#xamarin #xamarin.forms #.net-ядро

Вопрос:

У меня есть приложение Xamarin Forms (для Android и iOS, не UWP), которое использует созданный мной API DotNetCore 2.1 (работает под http://localhost:5000 ). Все это разрабатывается с использованием Visual Studio 2017.

Я могу отлаживать часть Android с адресом http://10.0.2.2:5000 , который переводится как «localhost» на стороне Android. Итак, я могу просто отлично использовать свой API из симулятора Android.

Проблема на стороне iOS.

Симулятор iOS действительно запущен на Mac, и поэтому он не может видеть, что на моем компьютере с Windows запущен API.

Как мне настроить мои компьютеры Windows / Mac, чтобы я мог использовать свой локальный API?

Я могу выполнить пинг моего компьютера с Windows с Mac, но на этом все.

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

1. Предполагая, что обе машины находятся в одной локальной сети / подсети, в вашем коде используйте адрес локальной сети вашего сервера DotNetCore (т.Е. ваш IP-адрес хоста Windows Visual Studio ( ipconfig его или откройте сетевые свойства, чтобы найти текущий IP-адрес сетевой карты, которая находится в той же подсети, что и ваше устройство macOS, и т.д.) Затем используйте этот IP-адрес, чтобы также связать ваш сервер DotNetCore во время его запуска, чтобы он прослушивал это подмножество запросов на входящий трафик

2. Откройте свой проект Xamarin Form в Visual Studio 2017 на ПК с Windows и выполните сопряжение с Mac. Посмотрите, сможете ли вы выполнить сопряжение с Mac успешно.

3. Да, я подключаюсь к Mac просто отлично (я могу создавать и отлаживать в эмуляторе). Я исправил это, используя локальный IP-адрес моего компьютера и для входящих запросов разблокируя порт, который я использовал (в данном случае 5000).

Ответ №1:

Я решил эту проблему и публикую то, что я сделал, чтобы помочь другим. Теперь я могу использовать свой веб-api .net core 2.1 как с эмулятора Android, так и с эмулятора iOS и с реальных устройств.

1) Запустите ipconfig, чтобы получить ваш локальный IP-адрес.

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

2) Я не делал ничего особенного с классом Program. Вы можете видеть, что это шаблонный код по умолчанию для файла / нового проекта. Я видел много предложений по использованию более явной конфигурации Kestral. Я уверен, что в некоторых сценариях это помогло бы, но в моем случае в этом не было необходимости.

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

3) Настройте Kestral для прослушивания по этому IP и порту (в отличие от localhost).

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

4) Откройте брандмауэр для передачи трафика на этот порт.

 netsh advfirewall firewall add rule name="Http Port 5000" dir=in action=allow protocol=TCP localport=5000
  

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

1. Вы можете отметить свой ответ, чтобы его увидело больше людей,

2. Не раньше завтрашнего дня! Но, да, я это сделаю.

3. большое спасибо за этот простой и в то же время очень понятный совет. Только что заработало прямо сейчас. Хотя я определил URL-адрес kestrel с помощью файла appsettings.json. Сработало как по волшебству.