Android: истечение времени работы при вызове веб-службы - PullRequest
1 голос
/ 30 мая 2011

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

Для соединения с сервером я использую 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

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

Ответы [ 5 ]

4 голосов
/ 30 мая 2011

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

HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 10000);
int timeoutSocket = 60*1000;
HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
1 голос
/ 29 августа 2012

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

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

).
0 голосов
/ 03 декабря 2015

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

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

время ожидания истекло

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

0 голосов
/ 03 ноября 2012

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

0 голосов
/ 28 октября 2012

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

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

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

...