Android: истечение времени работы при вызове веб-службы

1

Я звоню в веб-службу из приложения Android. Когда я использую AVD, все в порядке, и у меня есть ответ от сервера, но когда я запускаю свое настоящее устройство (HTC), я получаю "Тайм-аут операции". Скорость интернета на устройстве хороша, например, Карты Google загружаются очень быстро.

Для подключения к серверу я использую ksoap2:

SoapObject request = new SoapObject(getString(R.string.NAMESPACE), getString(R.string.METHOD_NAME)); 

        SoapSerializationEnvelope envelope = 
            new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.dotNet = true;


envelope.setOutputSoapObject(request);
int Timeout = 10000;
        HttpTransportSE androidHttpTransport = new HttpTransportSE(FullURL, Timeout);

        try {
            androidHttpTransport.call(getString(R.string.SOAP_ACTION), envelope);           
            return envelope.getResponse().toString();
        } 
        catch (Exception e) {
            return ("ERROR:" + e.getMessage());
        }

URL-адрес содержит IP-адрес сервера, например

http://46.146.120.165/RouteGen/Service.asmx

Почему существует ошибка времени на реальном устройстве и как заставить его работать нормально?

  • 0
    Ситуация была с портом 80. Я создал для него правило в брандмауэре Windows, и теперь все в порядке с вызовом веб-метода с устройства Android!
  • 0
    Можете ли вы сказать, как вы решили эту проблему четко. Если я изменю порт, который не 80. Это нормально? Жду от вас ответа, Илья Блох. Благодарю.
Теги:
web-services
device
ksoap2
timeout

5 ответов

4

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

HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10000);
int timeoutSocket = 60*1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
  • 0
    Я добавляю код Android в свой первый пост. Вы видите, я добавил параметр Timeout в HttpTransportSE .. но это не помогло.
  • 0
    @ IIya Блох - Не зная о httptransportse. Может быть, он устанавливает только время ожидания соединения, а не время ожидания данных.
Показать ещё 2 комментария
1

У меня была такая же проблема. Решение, которое я нашел, это то, что телефон использует соединения WiFi или 3g, а веб-служба, на которую я ссылался, имела какой-то брандмауэр.

Итак, я заменил IP-адрес в URL (например: "http://10.0.0.0" ) на имя хоста (пример: "http://abc.com" ).

0

Я решил подобную проблему, создав правило в брандмауэре на моей машине разработки, чтобы разрешить удаленные соединения на порту 80.

0

Я сталкиваюсь с этой ситуацией при разработке моего проекта и нашел решение, которое я описываю ниже:

Отключите брандмауэр Windows от Control Panel -> Windows Firewall and click on Turns Windows Firewall on or off to turn off your Windows Firewall.

Тогда ваше приложение отлично работает.

-1

У меня такой тип ошибки, когда я тестировал свое приложение на локальном сервере. Я использовал IP-адрес системы, он отлично работает. Если у кого-то такая же проблема, сначала проверьте IP-адрес своего URL-адреса. Надеюсь, это поможет другим которые тестируют приложение на локальном сервере.

Вчера я использовал эту ссылку для веб-сервиса http://192.168.1.7/DemoAndroid/Loginwebservice.php?username=john&dob=1234.  и он работает нормально, но сегодня, когда я использовал ту же ссылку, он дал мне ошибку

время работы

поэтому я проверил свой системный IP-адрес, и это было не так, как указано в url.so я скопировал этот IP-адрес и Paste in above url, и он снова работает.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню