Доступ к эмулятору Azure с другого устройства
У меня есть два разных проекта:
- Приложение для Windows Phone 8, которое я запускаю на реальном физическом устройстве разработки.
- Облачная служба Azure, которая содержит одну простую конечную точку WebRole, которая содержит ASP.NET MVC WebAPI.
Моя цель проста:
Используйте приложение WP8, запущенное с реального устройства, чтобы получить доступ (используя HTTPClient) к контроллеру WebAPI, когда он развернут в эмуляторе Azure.
Что делает работа:
- Приложение может успешно взаимодействовать с WebApi, когда оно развернуто в Azure Cloud.
- Приложение может успешно взаимодействовать с WebApi, если оно размещено локально на
IIS Express
(Без лазури), аIIS Express
настройки изменены в соответствии с этой статьей.
Насколько я понимаю, проблема в том, что эмулятор Azure настроен на прослушивание IP-адреса 127.0.0.1, который недоступен извне домена localhost.
Я нашел этот пост, который предлагает решение именно этой проблемы, но попытка выполнить его приводит к неизвестному исключению при попытке развертывания в эмуляторе Azure.
Действительно ли невозможно локально протестировать приложение WP8, которое взаимодействует с облачной службой Azure?
6 ответов
Я выяснил, как можно подключить эмулятор телефона или подключенное физическое устройство Windows Phone к эмулятору Azure.
Для других разработчиков, борющихся с тем же требованием, вот шаги, необходимые для его работы:
Предположения:
- Вы знаете IP-адрес хост-машины.
- Нет Брандмауэр блокирует доступ
- Завершите работу эмуляторов IIS и Azure и перезапустите их после изменений конфигурации
Эмулятор вычислений Azure:
- открыто
"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devfabric\DevFC.exe.config"
для редактирования. - Задавать
"VipPoolStartIPAddress"
а также"VipPoolEndIPAddress"
IP вашего хостинг-компьютера (например, 192.168.1.100)
Эмулятор хранилища Azure:
- Откройте оба
"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceLDB.exe.config"
а также"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore\DSServiceSQL.exe.config"
для редактирования. - Установить
services
раздел в обоих файлах для использования хостинга IP. - Настройте строку подключения к хранилищу в настройках "Роль" (вместо значения по умолчанию)
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 на момент написания статьи.
- Убедитесь, что эмулятор хранилища Azure отключен. Это можно сделать, открыв командную строку Azure Storage Emulator. Вы можете найти его, набрав
Azure Storage Emulator
в меню Пуск. Как только он откроется, введитеAzureStorageEmulator stop
, - Получите IP-адрес компьютера, на котором работает эмулятор хранилища Azure. Тип
ipconfig
в командной строке у вас уже есть открыть. Найти адрес IPV4 - должно быть что-то вроде192.168.1.xxx
- Откройте файл, расположенный в
C:\Program Files (x86)\Microsoft SDKs\Azure\Storage Emulator\AzureStorageEmulator.exe.config
- в
StorageEmulatorConfig
раздел, отредактируйте каждый сервис так, чтобы он выглядел как показано ниже. Очевидно, замените "xxx.xxx.xxx.xxx" на ваш фактический IP-адрес... Но оставьте порты прежними!!! - Затем перейдите к настройкам брандмауэра. Нам нужно разрешить входящие подключения к 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
Хит финиш, и все готово!... с этой частью...
Откройте командную строку с повышенными правами администратора и введите следующие команды (Примечание: замените 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
Откройте браузер на устройстве, где вы пытаетесь подключиться к эмулятору хранилища 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 не распознает ее как допустимую строку подключения. Так что держите это одной длинной раздражающей последовательностью.
Вам не нужно никаких внешних приложений для этого. Попробуйте переадресацию портов, используя следующее:
Запустите приложение в эмуляторе Azure, а затем узнайте его IP-адрес и порт, щелкнув правой кнопкой мыши значок IIS Express на панели задач (например, 127.0.0.1:81).
Теперь выберите порт для прослушивания (скажем, 8088) и перенаправьте его входящие запросы в ваше приложение, просто выполнив приведенную ниже команду в командной строке с повышенными привилегиями:
netsh interface portproxy add v4tov4 listenport=8088 connectaddress=127.0.0.1 connectport=81 protocol=tcp
Если брандмауэр работает, а выбранный вами порт заблокирован, то откройте порт (8088 в этом примере), добавив входящее правило в брандмауэр Windows.
Теперь просмотрите IP-адрес своего компьютера, например 192.168.0.100:8088, и теперь вы сможете получить доступ к своему приложению. И это можно использовать в вашем WP или Cordova (мобильном) приложении для локального тестирования. Надеюсь это поможет.
(Если вы хотите удалить переадресацию портов, просто используйте переключатель delete команды netsh interface portproxy.)
Поскольку вы уже используете (обычный) IIS
и вы утверждаете, что это работает, вы можете использовать Server Farming
как своего рода Reverse Proxy
+ Load Balancer
достичь своей цели:
Запустите ваш проект WebRole и сохраните внутренние URL-адреса (как показано на изображении
127.255.0.2:82
).открыто
IIS Manager
>Server Farms
>Create Server Farm
,Выберите имя и нажмите
Next
, на следующей панели ("Добавить сервер") добавьте все URL, которые вы собрали на шаге 1, иFinish
,Нажмите
Yes
когда вас спросят, хотите ли вы создать соответствующийRewrite Rules
для этой фермы.Под
Server Farms
нажмите на новую ферму и выберитеProxy
из значков справа, проверьтеReverse rewrite host in response headers
флажок.Теперь вы можете использовать свой обычный обязательный адрес 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, которая поможет мне с переадресацией портов.