4

Я сейчас на Windows 8.1 и использую VS 2012. Я использую Web api backend для всей тяжелой работы в моем приложении Windows Phone. Однако, когда я запускал приложение через эмулятор, все запросы к моему локальному веб-сайту api отклонялись.WP7 Device + Windows 8.1 + VS 2012 + Asp.net Web Api - Как заставить устройство разговаривать с веб-Api?

Я обнаружил, что эмулятор не смог решить localhost. После того, как я сделал что-то очень симулятор в this article, я не смог решить проблему с эмулятором Windows 8.

Однако мне нужно проверить его на моем самом устройстве, чтобы использовать камеру, но я столкнулся с той же проблемой, что и с эмулятором. Я не могу общаться с моей локальной веб-ави.

У меня не было проблем, когда я был в Windows 7 и VS 2010. Я только что использовал шаги в статье и не имел проблем.

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

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\"> 
<HTML> 
    <HEAD> 
    <TITLE>Bad Request</TITLE> 
    <META HTTP-EQUIV=\"Content-Type\" Content=\"text/html; charset=us-ascii\"> 
    </HEAD> 
    <BODY> 
    <h2>Bad Request - Invalid Hostname</h2> 
    <hr> 
    <p>HTTP Error 400. The request hostname is invalid.</p> 
    </BODY> 
</HTML> 

Что мне нужно настроить, чтобы получить это работать?

Редактировать

Я до сих пор есть эта проблема. Я смог заставить эмулятор Windows Phone 8 работать, но все еще не могу заставить мое устройство WP7 иметь возможность разговаривать с локальным веб-Api.

Пример кода Я буду делать что-то вроде этого

public class CourseService 
{ 
    public const string webApiUrl = "http://localhost:4372/api/values"; 
    RestClient client = new RestClient(webApiUrl); 
    public void GetCourses(Action successCallback, Action<string> errorCallBack, bool forceError = false) 
    { 
     var request = new RestRequest(Method.GET); 

     client.ExecuteAsync(request, response => 
     { 
      if (forceError) 
      { 
       errorCallBack("Failed"); 
      } 
      else 
      { 
       if (response.StatusCode == HttpStatusCode.OK) 
       { 
        successCallback(); 
       } 
       else 
       { 
        errorCallBack("Failed"); 
       } 
      } 
     }); 
    } 
} 



public class ValuesController : ApiController 
    { 
     // GET api/values 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 
    } 
  • Я попытался локальный (знал, что это не будет работать от того, что я читал)
  • пытался мой компьютер IP-адрес
  • попытался поместить в IIS Express в конфигурацию приложения ip-адрес для использования

    < привязок> < связывания протокола = "HTTP" bindingInformation = ": 55210: локальный" /> < связывания протокола = "HTTP" bindingInformation =»: 55210: 169.254.80.80" /> </привязок>

+0

для WP7 я рекомендую проверить http://stackoverflow.com/questions/10444273/httpclient-and-httpget-support-in-wp7 –

+0

У меня нет проблем с тем, как его кодировать, у меня есть проблема для них всем говорить на местном уровне. У меня было полностью функционирующее приложение, которое работает. Я просто пропустил что-то, что позволило бы подключить мое устройство к моему компьютеру, запустить локальную копию api-файла asp.net и установить, что устройство и веб-api будут разговаривать друг с другом локально. – chobo2

+0

Возможно, последующее поможет http://stackoverflow.com/questions/16118558/work-with-web-api-and-windows-phone –

ответ

1

В вашем 404 указано недопустимое имя хоста. Возможно, вам нужно будет выполнить описанные ниже шаги here Вкратце: добавьте имя своего компьютера в конфигурацию веб-службы. Речь идет о Windows Phone 8, но, возможно, это будет работать и для Windows Phone 7.

+0

Я видел это сообщение, но не понял, что произойдет, когда я запустил VS (будет ли он показывать localhost?). Я не понял, что я буду использовать в качестве ссылки в своем браузере WP7. С ip у меня есть немного успеха, как только я закрываю zune вниз, но пока он открыт, он терпит неудачу. – chobo2

1

Вы не отправили информацию о запросе, но с устройства бессмысленно вызывать localhost. Вам необходимо подключиться к удаленному компьютеру, который является именем вашего ПК или IP-адресом.

Если вы все еще не можете связаться с IP-адресом, я бы попытался установить Fiddler на WP7, чтобы лучше понять, что происходит. Fiddler with windows phone.

0

Как вы управляете webapi? С IIS Express?

Configure IIS Express for external access to VS2010 project

Или с IIS? Вы также столкнетесь с проблемами CORS. Это webapi 1 или 2?

Вы, вероятно, хотите этот NuGet пакет: https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Cors/

подробнее о CORS (совместное использование ресурсов кросс-происхождения) поддержки в Webapi2 здесь: http://msdn.microsoft.com/en-us/magazine/dn532203.aspx

если эти указатели не поможет вам, я как увидеть код, вызывающий webapi, и конструктор webapi и dataannotations

+0

Да, я использую экспресс-службу IIS, и в значительной степени это сделал (отлично работает, когда я использовал VS 2010 и WP &). Я использую webapi 1 и не знаю, что такое CORS. Наверное, я могу получить код. – chobo2

+0

Хорошо, я добавил несколько примеров кода о том, как я позвоню в мой webapi-сервис. – chobo2

0

Пожалуйста, проверьте свою конфигурацию в каталоге C: \ Windows \ System32 \ drivers \ etc \ hosts, а также вы можете попробовать управлять настройками LAN в IE Internet Properti эс.

Проверить как специальный раздел автоматической настройки и Автоматическое определение настроек.

0

Вы должны сделать это

<bindings> 
    <binding protocol="http" bindingInformation="*:55210:localhost" /> 
    <binding protocol="http" bindingInformation="169.254.80.80:55210:" /> 
</bindings> 

вместо этого

<bindings> 
    <binding protocol="http" bindingInformation=":55210:localhost" /> 
    <binding protocol="http" bindingInformation=":55210:169.254.80.80" /> 
</bindings> 

Кроме того, начать визуальный вариант с админ ... IIS Express работает таким образом, это вопрос безопасности.

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