ОБНОВЛЕНИЕ: Эти проблемы были вызваны обратным прокси-сервером, выполняющим перенаправление 301. Изменение адреса назначения редиректа устранило проблему.
Я пытаюсь сделать POST-запрос с Android на веб-сервис.
У меня есть веб-служба, работающая на IIS7 со следующим:
<OperationContract()> _
<Web.WebInvoke(BodyStyle:=WebMessageBodyStyle.Bare, Method:="POST", RequestFormat:=WebMessageFormat.Xml, ResponseFormat:=WebMessageFormat.Xml, UriTemplate:="HelloWorld")> _
Function HelloWorld() As XmlElement
Когда я отправляю запрос POST на этот URL-адрес из Firefox, он работает как положено.
Когда я делаю запрос с устройства Android, используя следующий код:
String sRequest = "http://www.myserviceurl.com/mysevice/HelloWorld";
ArrayList<NameValuePair> arrValues = new ArrayList<NameValuePair>();
arrValues.add(new BasicNameValuePair("hello", "world"));
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpRequest = new HttpPost(sRequest);
httpRequest.setHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequest.setEntity(new UrlEncodedFormEntity(arrValues));
HttpResponse response = httpClient.execute(httpRequest);
Я получаю ответ «Метод не разрешен» 405, и при просмотре журналов IIS запрос к этому URL-адресу отображается как «GET».
Если я изменю цель запроса на PHP-скрипт, который отображает $ _SERVER ['REQUEST_METHOD'], вывод будет POST.
В web.config веб-службы в качестве глаголов используются GET, HEAD и POST.
Есть что-то, что я упустил из виду?