2016-11-03 5 views
1

Я получаю «соединение отказано» или «плохой запрос» при попытке подключиться от эмулятора android к моей веб-службе на localhost. Я добавил номер порта в брандмауэре, чтобы разрешить соединения, и я пытался советам here изменить Applicationhost.configПодключение к локальной веб-службе от xamarin Vs2015 android emulator

Оба веб-службы и эмулятор выполняющихся на том же (Windows 10) ПК. В web.config сервера я следующее под «system.webServer»:

<httpProtocol> 
<customHeaders> 
    <clear /> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    <add name="Access-Control-Allow-Methods" value="GET, PUT, POST" /> 
</customHeaders> 
</httpProtocol> 

AFAIK эмулятор может найти веб-сервер (я не получаю 'не найдено ошибку), но сервер отказывается от соединения.

using (WebClient client = new WebClient()) 
    { 
    string json = ......; 
    client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
    //  I have also tried "application/x-www-form-urlencoded"; 
    string result = client.UploadString(UrlBase.urlBase + "SaveLocation", json); 

Если 'URLBase' является http://192.168.1.73:60080/Service1.svc/, я получаю 'Bad' запрос, который я знаю, что может быть результатом плохо отформатированный JSON.

Если «UrlBase» является удаленным сервером, соединение работает (поэтому я знаю, что формат json верен). Такая же обновленная dll работает как на удаленном, так и на локальном сервере.

Если «URLBase» является http://localhost:60080/Service1.svc/, я получаю исключение «отказ в соединении»

+0

Пожалуйста, покажите использованный код и используемый адрес. – greenapps

+0

И что неясно: работает ли эмулятор на том же компьютере, что и ваш веб-сервис? Если у вас три компьютера/ноутбуки, то все они являются их собственным локальным хостом. Поэтому, если вы говорите о локальном хосте, то как мы узнаем, что вы имеете в виду? – greenapps

+0

эмулятор - это собственная виртуальная машина и имеет собственный IP-адрес, поэтому localhost ссылается на эмулятор. Если вы хотите подключиться к компьютеру, на котором запущен эмулятор, используйте его IP или FQDN. – Jason

ответ

2

Я не использую каких-либо правил брандмауэра, потому что мой эмулятор находится на той же машине, что и хост службы. Как сказал Джейсон, вы должны использовать свой IP-адрес хоста. Чтобы избежать многих проблем, используйте локальный хост IIS, а не IIS express. Ваш «Плохой запрос» не является недопустимым Json, но Недопустимое имя хоста, потому что IIS express не разрешает ЛЮБЫЕ подключения, но с локальной машины. Вы можете попытаться обмануть его, как в ссылке, на которую вы ссылались выше, но зачем беспокоиться?

Это результат размещения приложения IIS Express.

enter image description here

Это является результатом локального IIS размещаемое приложение

enter image description here

После того, как проект вот результат:

enter image description here

+0

ОК, теперь я установил IIS, а свойства/веб-страница веб-проекта теперь позволяет мне выбрать «Local IIS» в качестве сервера (раньше он не был доступен - не может думать, почему VS2015 не включает IIS по умолчанию, если это так важно). Я создал веб-сайт в IIS, и если я просмотрю его в диспетчере IIS, я могу получить доступ к сайту ОК. Но теперь, когда я пытаюсь запустить службу в VS2015, я просто получаю ошибку 404. В IIS есть чему поучиться; напримерЯ не уверен, что нужно вводить для «Url проекта» на странице свойств сети (в настоящее время у меня есть http: // localhost/quilkin, где quilkin - это имя нового сайта IIS. – quilkin

+0

Сначала разрешите исправить VS для вас. вам нужно сделать. Откройте командную строку VS2015 и запустите «aspnet_regiis.exe -i» Теперь вы можете выбрать локальный IIS из VS. Попробуйте это и сообщите мне, что вы получаете. Я думаю, вы не указали правильный адрес ваш сервис. Он должен включать ваше имя приложения. Вы должны получить это, когда вы запустите его из VS. –

+0

Я создал его как веб-api, вы похожи на службу svc. Это WCF? Если вы можете поделиться своим примером веб-сервиса, я могу запустите его и скажите точно, что делать в клиенте Xamarin. –

Смежные вопросы