Android против WindowsMobile, использующих WebService - PullRequest
0 голосов
/ 08 марта 2012

Сценарий:

  • Я разрабатываю приложение для Windows Mobile, с Vb.net 2005.
  • Я разрабатываю приложение для Android с Eclipse.

Оба приложения имеют одинаковую логику. Оба приложения используют одни и те же веб-службы.

Сервер работает в Windows Server 2003, а приложение-служба развернуто с использованием VB.net 2005.

Тест:

  • Samsung Galaxy S2 с Android.
  • устройство Someone Chine с Windows Mobile.

Тот же вызов веб-службы занимает:

  • Android время: 3 минуты 44 секунды.
  • Windows Mobile время: 0 минут 54 секунды.

Время было рассчитано с использованием часов и представляет время пользователя.

Отличия:

  • Windows Mobile отправляет и получает таблицы данных.
  • Windows Mobile отправляет фотографии сериализацией Base64 (5 фотографий по 30 КБ каждая)
  • Android отправляет и получает JSON (данные могут быть преобразованы в JSON)
  • Android отправляет фотографии сериализацией Base64 (5 фотографий по 30 КБ каждая)

Почему время так отличается?

В Android Я использую веб-сервис, используя следующий код:

открытый класс Func_WebService {

private static int Ksoap_timeout = 40000; 
private static String NAMESPACE = "http://tempuri.org/";
private static String URL="http://XXX.137.xxx.79/Sincro_test_android/Service1.asmx";

private static  SoapObject request=null;
private static  SoapSerializationEnvelope envelope=null;
private static  SoapPrimitive  resultsRequestSOAP=null;

public static String PRIMERLOGGIN(String Usuario,String Contrasena,String Emei){

    final String METHOD_NAME = "PRIMERLOGGIN";
    final String SOAP_ACTION ="http://tempuri.org/PRIMERLOGGIN";

    request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("user", Variables.Usuario); 
    request.addProperty("pass", Variables.Contrasena); 
    request.addProperty("X", Variables.Emei); 

    envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true; //se asigna true para el caso de que el WS sea de dotNet
    envelope.setOutputSoapObject(request);

    HttpTransportSE transporte = new HttpTransportSE(URL);

    try {       
        transporte.call(SOAP_ACTION, envelope);
        resultsRequestSOAP = (SoapPrimitive)envelope.getResponse();
        return resultsRequestSOAP.toString() ;
    } 
    catch (Exception e) {
        return Estados_Sincro.Error_coneccion;
    }

}

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

Почему вы используете таблицы данных? Я предполагаю, что вы сериализуете с Json Datable? Таким образом, вы получаете много дополнительных данных. Десериализация является трудоемким процессом.

Я вижу, вы используете метод входа в систему. Я реализовал некоторые параметры входа в систему для j2me и Windows Mobile. Но я всегда предпочитаю нестандартные объекты и время отклика одинаковое.

0 голосов
/ 08 марта 2012

Судя по фрагменту кода, вы используете ksoap2-android. Эта библиотека для веб-сервисов SOAP. Однако вы говорите об Android, используя JSON ... как таковой, который не будет работать. Вы должны либо изменить сервер на использование SOAP и продолжать использовать ksoap2-android, либо перейти на приложение android для анализа JSON с какой-либо другой библиотекой.

...