#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. Сработало как по волшебству.