Использование службы WCF REST из Android происходит очень медленно - PullRequest
3 голосов
/ 31 августа 2010

У меня есть служба WCF REST, созданная на C #, и она возвращает изображение как часть интенсивной работы процессора. Клиент работает на Android (Java). По умолчанию он возвращает текстовый объект JSON, который выглядит примерно так:

{ "d", [9,0,77,12,11, ...]}

Это байты изображения. Хорошо. Однако все решения для декодирования этого JSON невыносимо медленны. Я пробовал Gson, Jackson и встроенный класс Android JSONObject. Понятия не имею, почему они такие медленные.

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

Это работает хорошо, быстро и довольно просто в обращении на стороне Android. Тем не менее, это похоже на некоторую путаницу и своего рода нарушение принципов дизайна REST.

Я что-то здесь упускаю? Есть ли лучший способ сделать это?

Ответы [ 4 ]

5 голосов
/ 01 сентября 2010

Как насчет того, чтобы ваша служба REST вернула Redirect 303 с заголовком Location, в котором есть URL-адрес, указывающий на изображение?Или почему бы просто не вернуть байты непосредственно с первого URL-адреса?

Что касается RESTful или нет, то возвращение закодированного изображения JSON не совсем соответствует духу самоописания REST.

Просто убедитесь, что конечная точка, которая возвращает поток байтов изображения, на самом деле использует медиа тип image / * в заголовке контента.

0 голосов
/ 01 сентября 2010

Говорят о разработке клиентского приложения отдыха для Android в форме Google IO 2010.

http://www.youtube.com/watch?v=xHXn3Kg2IQE

На этом занятии будут рассмотрены архитектурные аспекты разработки приложений RESTful наПлатформа Android.В нем рассматриваются шаблоны проектирования, интеграция с платформой и проблемы производительности, характерные для платформы Android.

Отличный ресурс, который стоит посмотреть.

0 голосов
/ 01 сентября 2010

Как писал Даррел выше, если URL вычисляет и возвращает изображение, просто верните это изображение с соответствующим типом содержимого, например, в качестве изображения PNG.Передача изображения, закодированного в JSON, является, по меньшей мере, странным выбором.

0 голосов
/ 01 сентября 2010

Ну, одной из ваших основных проблем является попытка передачи двоичных данных в текстовом формате.Большинство, если не все библиотеки java json, попытаются распознать тип поля.Если полей будет много, потребуется много времени.

Да, прямая трансляция намного быстрее.Возможно, вы можете использовать XML, поскольку он поддерживает двоичные данные или данные BLOB-объектов.

...