Доступ к эмулятору Azure с другого устройства

У меня есть два разных проекта:

  1. Приложение для Windows Phone 8, которое я запускаю на реальном физическом устройстве разработки.
  2. Облачная служба Azure, которая содержит одну простую конечную точку WebRole, которая содержит ASP.NET MVC WebAPI.

Моя цель проста:
Используйте приложение WP8, запущенное с реального устройства, чтобы получить доступ (используя HTTPClient) к контроллеру WebAPI, когда он развернут в эмуляторе Azure.

Что делает работа:

  1. Приложение может успешно взаимодействовать с WebApi, когда оно развернуто в Azure Cloud.
  2. Приложение может успешно взаимодействовать с WebApi, если оно размещено локально на IIS Express (Без лазури), а IIS Express настройки изменены в соответствии с этой статьей.

Насколько я понимаю, проблема в том, что эмулятор Azure настроен на прослушивание IP-адреса 127.0.0.1, который недоступен извне домена localhost.

Я нашел этот пост, который предлагает решение именно этой проблемы, но попытка выполнить его приводит к неизвестному исключению при попытке развертывания в эмуляторе Azure.

Действительно ли невозможно локально протестировать приложение WP8, которое взаимодействует с облачной службой Azure?

6 ответов

Решение

Я выяснил, как можно подключить эмулятор телефона или подключенное физическое устройство Windows Phone к эмулятору Azure.

Для других разработчиков, борющихся с тем же требованием, вот шаги, необходимые для его работы:

Предположения:

  1. Вы знаете IP-адрес хост-машины.
  2. Нет Брандмауэр блокирует доступ
  3. Завершите работу эмуляторов IIS и Azure и перезапустите их после изменений конфигурации

Эмулятор вычислений Azure:

  1. открыто "C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devfabric\DevFC.exe.config" для редактирования.
  2. Задавать "VipPoolStartIPAddress" а также "VipPoolEndIPAddress" IP вашего хостинг-компьютера (например, 192.168.1.100)

Эмулятор хранилища Azure:

  1. Откройте оба "C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceLDB.exe.config" а также "C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceSQL.exe.config" для редактирования.
  2. Установить services раздел в обоих файлах для использования хостинга IP.
  3. Настройте строку подключения к хранилищу в настройках "Роль" (вместо значения по умолчанию) Windows Azure storage emulator установка):
    • Щелкните правой кнопкой мыши на Role (в папке "Роли" в обозревателе решений), чтобы ввести его Properties стр. Нажмите на Settings Вкладка. Убедитесь, что вы редактируете Local настройки (выберите его на Service Configuration коробка выбора).
    • Отредактируйте строку подключения для хранилища
    • Введите учетные данные вручную
    • Имя учетной записи и ключ учетной записи написаны под accounts раздел в DSServiceSQL.exe.config
    • Укажите пользовательские конечные точки с вашим IP-адресом хостинга.

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

Наслаждайтесь!

Я знаю, что на этот вопрос уже дан ответ, но еще не было простого решения этой проблемы. Вот что я сделал, чтобы мой Mac говорил с моим эмулятором хранилища Azure (v4.3), работающим на моем ПК по всей локальной сети.

Я использую Windows 10 версии 1511 с v4.3 эмулятора хранилища Azure на момент написания статьи.

  1. Убедитесь, что эмулятор хранилища Azure отключен. Это можно сделать, открыв командную строку Azure Storage Emulator. Вы можете найти его, набрав Azure Storage Emulator в меню Пуск. Как только он откроется, введите AzureStorageEmulator stop,
  2. Получите IP-адрес компьютера, на котором работает эмулятор хранилища Azure. Тип ipconfig в командной строке у вас уже есть открыть. Найти адрес IPV4 - должно быть что-то вроде 192.168.1.xxx
  3. Откройте файл, расположенный в C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe.config
  4. в StorageEmulatorConfig раздел, отредактируйте каждый сервис так, чтобы он выглядел как показано ниже. Очевидно, замените "xxx.xxx.xxx.xxx" на ваш фактический IP-адрес... Но оставьте порты прежними!!!
  5. Затем перейдите к настройкам брандмауэра. Нам нужно разрешить входящие подключения к IP-адресу вашего компьютера к этим трем портам, перечисленным выше в StorageEmulatorConfig раздел. В Панели управления -> Система и безопасность -> Брандмауэр Windows -> Расширенные настройки -> Правила для входящих подключений нажмите New Rule... на правой стороне экрана. Вы пройдете через мастера, чтобы настроить новое правило. Ниже я опишу, что делать:

Тип правила: Выбрать Custom

Программа: Выбрать Customize... затем Apply to services only

Протокол и порты: установите Protocol type в TCP и установить Remote port в Specific Ports и в поле ввода введите 10000-10002, Это добавит диапазон портов, указанных в StorageEmulatorConfig раздел с этим правилом и, в свою очередь, разрешить входящие соединения через эти порты.

Область применения: пропустите этот раздел, чтобы он был применим ко всем IP-адресам для простоты

Действие: разрешить соединение

Профиль: в зависимости от того, на каком профиле подключения вы работаете, вы должны выбрать подходящий. В моем случае мой компьютер был подключен к локальной сети в моем доме, поэтому я был подключен к частной сети. Я отменил выбор Domain а также Public, Я бы порекомендовал сделать то же самое.

Имя: эмулятор хранилища Azure

Хит финиш, и все готово!... с этой частью...

  1. Откройте командную строку с повышенными правами администратора и введите следующие команды (Примечание: замените xxx.xxx.xxx.xxx на ваш IP-адрес!!!):

    netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10000/ user=everyone

    netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10001/ user=everyone

    netsh http add urlacl url=http://xxx.xxx.xxx.xxx:10002/ user=everyone

  2. Откройте браузер на устройстве, где вы пытаетесь подключиться к эмулятору хранилища Azure, и попробуйте получить доступ к следующим URL-адресам:

    http://xxx.xxx.xxx.xxx:10002/

    http://xxx.xxx.xxx.xxx:10002/

    http://xxx.xxx.xxx.xxx:10002/

Если вы получите ответ, это будет примерно так:

InvalidUri Запрошенный URI не представляет какой-либо ресурс на сервере.

тогда ты золотой... Если нет, оставь комментарий, и я обновлю свой ответ.

Важно отметить, что вы должны обновить строку подключения в файле.config проекта, где вы генерируете URL для доступа к вашим изображениям (при условии, что это то, что вы делаете). ВЫ НЕ МОЖЕТЕ ДЛИННО ИСПОЛЬЗОВАТЬ SHORTCUT STRING CONNECTION CONNECTION! Он должен быть обновлен до: (замените xxx.xxx.xxx.xxx на IP-адрес сверху:

DefaultEndpointsProtocol = HTTP; AccountName = devstoreaccount1; AccountKey = Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq / K1SZFPTOtr / KBHBeksoGMGw ==; BlobEndpoint = http://xxx.xxx.xxx.xxx:10000/devstoreaccount1;TableEndpoint=http://xxx.xxx.xxx.xxx:10002/devstoreaccount1;QueueEndpoint=http://xxx.xxx.xxx.xxx:10001/devstoreaccount1;

Если у вас это есть в разделе AppSettings и вы правильно отформатируете его с помощью \n, вы нарушите строку, и компонент Storage не распознает ее как допустимую строку подключения. Так что держите это одной длинной раздражающей последовательностью.

Вам не нужно никаких внешних приложений для этого. Попробуйте переадресацию портов, используя следующее:

  1. Запустите приложение в эмуляторе Azure, а затем узнайте его IP-адрес и порт, щелкнув правой кнопкой мыши значок IIS Express на панели задач (например, 127.0.0.1:81).

  2. Теперь выберите порт для прослушивания (скажем, 8088) и перенаправьте его входящие запросы в ваше приложение, просто выполнив приведенную ниже команду в командной строке с повышенными привилегиями:

    netsh interface portproxy add v4tov4 listenport=8088 connectaddress=127.0.0.1 connectport=81 protocol=tcp

  3. Если брандмауэр работает, а выбранный вами порт заблокирован, то откройте порт (8088 в этом примере), добавив входящее правило в брандмауэр Windows.

Теперь просмотрите IP-адрес своего компьютера, например 192.168.0.100:8088, и теперь вы сможете получить доступ к своему приложению. И это можно использовать в вашем WP или Cordova (мобильном) приложении для локального тестирования. Надеюсь это поможет.

(Если вы хотите удалить переадресацию портов, просто используйте переключатель delete команды netsh interface portproxy.)

Поскольку вы уже используете (обычный) IIS и вы утверждаете, что это работает, вы можете использовать Server Farming как своего рода Reverse Proxy + Load Balancer достичь своей цели:

  1. Запустите ваш проект WebRole и сохраните внутренние URL-адреса (как показано на изображении 127.255.0.2:82).

  2. открыто IIS Manager > Server Farms > Create Server Farm,

  3. Выберите имя и нажмите Next, на следующей панели ("Добавить сервер") добавьте все URL, которые вы собрали на шаге 1, и Finish,

  4. Нажмите Yes когда вас спросят, хотите ли вы создать соответствующий Rewrite Rules для этой фермы.

  5. Под Server Farms нажмите на новую ферму и выберите Proxy из значков справа, проверьте Reverse rewrite host in response headers флажок.

  6. Теперь вы можете использовать свой обычный обязательный адрес IIS для доступа к Emulator экземпляры (после запуска).

PS: Если вы хотите отменить эти изменения, удалите Ферму. затем нажмите на имя вашего компьютера / сервера (корневой элемент) в левом дереве, выберите Url Rewrite справа и удали ARR правила.

Я нашел способ, благодаря этому великому посту здесь.

Очевидно, что путем перенаправления любого трафика, отправленного на мой локальный IP-адрес (например, 192.168.0.1), на 127.0.0.1, я теперь могу использовать эмулятор Windows Phone 8 против экземпляров эмулятора Azure Cloud.

Способ, которым я сделал маршрутизацию, заключается в использовании простого приложения под названием PassPort, но я предполагаю, что есть много альтернатив ему.

Рекомендуется использовать переадресацию портов из-за нестабильности эмулятора Azure. Тем не менее, это не работает, когда connectaddress 127.0.0.1 с использованием встроенного инструмента netsh на моем Windows 7 (см. подробно: проблема с добавлением portproxy с помощью netsh). Я ищу и нахожу утилиту переадресации портов PassPort Win XP, которая поможет мне с переадресацией портов.

Другие вопросы по тегам