Синхронизация 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 "как администратор".