Синхронизация Android Emulator с IIS Express не работает, но работает с Cassini
Я пытаюсь отправить данные из приложения Android, работающего в Android Emulator, на моем локальном компьютере, в веб-приложение под управлением IIS Express, также запущенное на моей локальной машине. К сожалению, когда я отправляю сообщение в 10.0.2.2 из эмулятора, я получаю сообщение об ошибке Host Not Found
.
Если я настрою веб-приложение для запуска под ASP.NET Dev Server (Cassini) вместо IIS Express, приложение Android может отправлять сообщения без проблем. Какую конфигурацию мне не хватает для IIS Express, которая мешает ей работать с loopback от эмулятора Android?
Ответы
Ответ 1
Предоставьте себе разрешение на привязку к сетевым адаптерам, отличным от localhost, и настройте IIS express для привязки ко всем адаптерам.
IIS Express будет принимать соединения с эмулятора Android через 10.0.2.2. Если вы добавите правило в брандмауэр, вы также можете открыть IIS Express в своей сети, что снижает безопасность, но полезно для тестирования физических устройств.
Детали шага: (они предполагают номер порта 5555 - вместо этого используйте ваш фактический порт)
-
Запустите это из командной строки в качестве администратора:
netsh http add urlacl url=http://*:5555/ user="NT AUTHORITY\INTERACTIVE"
-
В% USERPROFILE%\Documents\IISExpress\config\applicationhost.config замените привязку локального хоста на сайте bindingInformation="*:5555:*"
. Результат должен выглядеть следующим образом:
<site name="..." id="...">
<!-- application settings omitted for brevity -->
<bindings>
<binding protocol="http" bindingInformation="*:5555:*" />
</bindings>
</site>
Ответ 2
Добавьте следующую строку в конфигурационный файл IIs (ex c:\Users [YourName]\Documents\IISExpress\config\applicationhost.config) При необходимости измените порт 8085.
<binding protocol="http" bindingInformation="*:8085:127.0.0.1" />
чтобы ваш файл конфигурации закончил что-то вроде этого
<bindings>
<binding protocol="http" bindingInformation="*:4396:localhost" /> // the existing one
<binding protocol="http" bindingInformation="*:8085:127.0.0.1" /> // new line
</bindings>
теперь вы можете позвонить своему веб-сервису с удаленного телефона, позвонив на порт 8085
ex from android emu.
new HttpPost("http://10.0.2.2:8085");
Ответ 3
По умолчанию IIS Express принимает только соединения с localhost. Чтобы включить подключения с удаленных устройств (и, соответственно, эмулятор), используйте инструкции здесь.
Короче:
netsh http add urlacl url=http://[machinename]:[port]/ user=everyone
netsh http delete urlacl url=http://[machinename]:[port]/
Замените [machinename]
и [port]
на имя вашего компьютера (или нелокальный IP) и порт IIS Express.
Также см. этот question и .
Ответ 4
Вот мое решение:
Я использую Visual Studio Express 2013 для Интернета, и моя веб-служба RESTful работает на IIS express.
Когда я попытался получить доступ к моему веб-сервису с помощью эмулятора Android на том же компьютере, он дал мне эту недопустимую ошибку хоста. Как было предложено выше, я добавил новые привязки к моему файлу applicationhost.config, но все же это не сработало. Наконец, я смог исправить эту проблему, запустив Visual Studio "как администратор".