POSTing из Android в веб-сервис WCF REST: как получить переданные данные JSON - PullRequest
0 голосов
/ 17 июня 2011

Я пытаюсь связаться с веб-службой RESTful WCF POST от клиента Android, который должен передать некоторые данные в формате json. Я уже успешно связался с веб-службой RESTful WCF GET, но не могу понять, как работает версия POST.

Это фрагмент кода клиента Android, который делает вызов:

HttpPost request = new HttpPost(uri);
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
/*... Building the NameValuePairs object ... */
request.setEntity(new UrlEncodedFormEntity(nameValuePairs));
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpResponse response = httpClient.execute(request);
/* ... handling the response ...*/

и это код веб-службы WCF:

[WebInvoke(Method = "POST",
        UriTemplate = "ServiceActivation",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    string MyPostMethod();

public string MyPostMethod()
    {
        try
        {
            /*...*/
        }
        catch (Exception e)
        {
            /*...*/
        }
    }

Таким образом, клиент Android успешно обращается к веб-сервису; но я не знаю, как извлечь в MyPostMethod данные, переданные от клиента Android. Примерно так: MyPostMethod (строковые данные) заканчивается неверным запросом от клиента Android.

Итак, как можно получить переданные данные в веб-сервисе?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 17 июня 2011

Вы должны определить контракт данных для ваших опубликованных данных - обычно это класс или набор связанных классов, которые будут использоваться для десериализации сообщения JSON и использования этого класса в качестве входного параметра. Вот пример как использовать контракты данных без службы WCF - это может помочь вам определить правильный контракт для вашего сообщения.

Edit:

Я только что заметил, что вы публикуете значения в кодировке url - это не запрос JSON, и он имеет другой тип контента: application/x-www-form-urlencoded. JSON-запрос для WCF - это JSON, передаваемый в содержимом запроса. Работа с запросами в кодировке URL в WCF - это hard . Это изменится в Web API, который поддерживает эти запросы .

0 голосов
/ 07 декабря 2011

Извините.Для меня это не ответ:ты знаешь как это сделать :) ';пожалуйста, опубликуйте свое решение.

Я нахожусь в привязке к тому, что было в j0nSn0w 17 июня, и могу найти эту тему только как конструктивный указатель.

Хранение фактического решения в заявке кажется извращенным.

0 голосов
/ 19 октября 2011

Gson позволяет легко создавать сообщения json в Android.

LoginToWebSiteRequest loginToWebSiteRequest = new LoginToWebSiteRequest();// a pojo based on some json message
loginToWebSiteRequest.setEmail(email);
loginToWebSiteRequest.setPassword(password);
Gson gson = new Gson();
String json = gson.toJson(loginToWebSiteRequest,LoginToWebSiteRequest.class);
HttpPost httpPost = new HttpPost(loginUrl);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json; charset=UTF-8");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...