Работа с веб-API и Windows Phone

Я разрабатываю решение, состоящее из двух элементов: веб-сервера, который публикует некоторые службы REST, и мобильного клиента, который использует эти службы. Для реализации служб REST я использовал технологию Web API.

Когда я запускаю веб-проект в режиме отладки, все работает нормально. Я могу использовать службы, указав на localhost:63954/api. Странный факт: если я меняю "localhost" на "127.0.0.1" или на LAN-адрес машины, 192.168.xxx.xxx, сервер больше не отвечает!

Затем, когда я запускаю клиент Windows Phone, который работает в виртуализированном эмуляторе, он не может подключиться к веб-серверу! Даже если оба компонента работают на одной машине. Очевидно, что в Windows Phone я не могу использовать «локальный хост», поскольку локальным хостом телефона является сам телефон. Итак, я пытаюсь использовать адрес 192.168.xxx.xxx, который является адресом машины, на которой запущена веб-служба. Но эмулятор мобильного телефона не может подключиться к веб-сервису.

Мне нужно запустить веб-сервер в Visual Studio 2012, так как мне нужно его отладить и сделать доступным из эмулятора Windows Phone, но я не знаю, как это сделать. Можешь мне помочь? Любая идея?

Большое спасибо, Риккардо.

РЕДАКТИРОВАТЬ: Перейдя по ссылке, найденной здесь (Привязка IIS Express к IP-адресу) и, отключив брандмауэр, я могу запустить веб-приложение за пределами VS12 и сделать его доступным с другого компьютера в сети, а также с эмулятора WP. Это может быть обходной путь, но я не могу отлаживать службу REST в VS таким образом, и это нехорошо...


person Riccardo Cipolleschi    schedule 20.04.2013    source источник
comment
Почему у вас порт 93564? TCP не поддерживает ничего больше 65535   -  person Filip    schedule 20.04.2013
comment
VisualStudio2012 выбрал случайный порт, и я сделал ошибку при копировании порта... Настоящий порт - 63954. Прошу прощения за ошибку и спасибо, Филипп, что заметил это.   -  person Riccardo Cipolleschi    schedule 20.04.2013
comment
хорошо. Можете ли вы открыть адрес 192.168.xxx.xxx из браузера? Что происходит, когда вы это делаете?   -  person Filip    schedule 20.04.2013
comment
Нет. Когда я это делаю, я получаю сообщение: Веб-страница не найдена. Я получаю такое же сообщение, если использую 127.0.0.1 вместо localhost. И это очень странно для меня... РЕДАКТИРОВАТЬ: код ошибки HTTP 400 Bad Request   -  person Riccardo Cipolleschi    schedule 20.04.2013
comment
когда вы запускаете nslookup 127.0.0.1 в командной строке win, что она возвращает?   -  person Filip    schedule 20.04.2013
comment
После редактирования: HTTP 400 означает, что ваш API доступен, но есть проблема с фактическим запросом, что забавно, учитывая, что проблема зависит от URL. См. эту статью asp.net /web-api/overview/testing-and-debugging/ . Настройте ведение журнала, и вы увидите, что не так.   -  person Filip    schedule 20.04.2013
comment
Спасибо за помощь. Во всяком случае, это не приводит к решению. Если я наберу nslookup, я получу: Имя: localhost Адрес: 127.0.0.1 Я внедрил трассировщик и попытался отладить. Но когда я пытаюсь связаться с WS через 127.0.0.1 или через соответствующий адрес 192.168.xxx.xxx, трассировщик ничего не регистрирует. Такое впечатление, что запросы не доходят до сервера. Я попытался использовать подключаемый модуль Firefox REST для тестирования службы и получил следующее сообщение: Неверный запрос — недопустимое имя хоста, ошибка HTTP 400. Недопустимое имя хоста запроса.   -  person Riccardo Cipolleschi    schedule 21.04.2013
comment
это прискорбно, но, по крайней мере, теперь у вас есть правильное сообщение об ошибке. Сначала попробуйте изучить свой хост-файл ( en.wikipedia.org/wiki/Hosts_%28file% 29). Ваш nslookup выглядит нормально, но все равно посмотрите. Во-вторых, попробуйте этот stackoverflow.com/questions/4831097/< /а>   -  person Filip    schedule 21.04.2013


Ответы (2)


Эмулятор Windows Phone 8 работает как отдельная машина в вашей сети со своим собственным IP-адресом и конфигурацией. Поэтому, чтобы эмулятор мог получить доступ к вашему сервису, вам необходимо убедиться, что порт, к которому вы пытаетесь получить доступ, открыт для входящих подключений.

person Den Delimarsky    schedule 20.04.2013
comment
Я знаю, что эмулятор - это другая машина. На самом деле, я разработал другие решения с Windows Phone и веб-службой Java, размещенной на Tomcat Apache. Во всех этих проектах у меня нет проблем с парой WindowsPhone-REST. Поэтому я думаю, что мне не хватает какой-то конфигурации в Visual Studio 2012. Я не могу понять, почему localhost работает (из браузера) и почему 127.0.0.1 или соответствующие адреса 192.168.xxx.xxx не работают... - person Riccardo Cipolleschi; 20.04.2013

Как вы упомянули, телефон Windows работает отдельно на вашем клиентском компьютере. Одним из способов решения этой проблемы является привязка IP-адреса вашей машины к веб-API, поэтому к веб-API можно получить доступ с помощью IP-адреса машины. Вы можете привязать ip обратиться к проекту с помощью Microsoft Webmatrix. Итак, вы можете получить доступ к веб-API, используя IP-адрес. Надеюсь, это поможет.

person Coder    schedule 22.04.2013