Тайм-аут вызова веб-службы .NET (разработчик Android использует KSOAP2) - PullRequest
1 голос
/ 04 сентября 2010

При попытке вызвать метод веб-службы .NET я получаю исключение Java Socket «Тайм-аут операции». Я использовал множество примеров в Интернете, чтобы заставить мой андроид вызывать веб-сервис .net.

Я запускаю веб-сервис, используя VS2010 в режиме отладки. Веб-метод, который я вызываю, очень прост -> "string GetVersion ()"

Я прочитал некоторые сообщения о том, что eclipse необходимо настроить для доступа к Интернету, изменив настройки прокси-сервера «Preferences -> General -> Network Connections» из пункта меню Window. Я не смог точно определить, что мне нужно настроить в Прокси, чтобы заставить вещи работать, если в этом проблема.

Я также попытался получить доступ к корневой странице веб-службы .net (service.asmx) с моего Android, но безуспешно. Я могу получить доступ к странице asmx без проблем, используя IE на локальной машине. Я выключил брандмауэр, и это тоже ничего не решило. Это первый раз, когда я пытался получить доступ к веб-службе с удаленного компьютера, когда он работал с использованием VS2010 в режиме отладки.

Я не знаю, есть ли у меня проблемы с конфигурацией на стороне затмения или на стороне VS2010.

Я также использую Windows 7 Home Premium.

Есть идеи?

Ниже приведен фрагмент кода ...

private static final String SOAP_ACTION = "http://192.168.1.151/MyWebService/GetVersion";
private static final String METHOD_NAME = "GetVersion";   
private static final String NAMESPACE = "http://192.168.1.151/MyWebService"; 
private static final String URL = "http://192.168.1.151/MyService.asmx";

private void Connect()
{
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

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

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    System.out.println("DEBUG >> HttpTransport.call()");

    try
    {         
       androidHttpTransport.call(SOAP_ACTION, envelope);
    }
    catch(IOException iexc)
    {
     System.out.println("EXCEPTION >> " + iexc.toString());
    }
    catch(XmlPullParserException xexc)
    {
     System.out.println("EXCEPTION >> " + xexc.toString());
    }

    try
    {
       Object result = (Object)envelope.getResponse();

       tv.setText(result.toString());
    }
    catch (SoapFault sp)
    {
     System.out.println("EXCEPTION >> " + sp.toString());
    }
}

Ответы [ 4 ]

0 голосов
/ 11 мая 2012

Если у вас есть проблема с вызовом веб-службы в Android, то Вы можете использовать приведенный ниже код для вызова веб-службы и получения ответа. Убедитесь, что ваша веб-служба возвращает ответ в Формат таблицы данных .. Этот код поможет вам, если вы используете данные из SQL Server база данных. Если вы используете MYSQL , вам нужно изменить одну вещь, просто замените слово NewDataSet из предложения obj2=(SoapObject) obj1.getProperty("NewDataSet"); на DocumentElement

private static final String NAMESPACE = "http://tempuri.org/"; 
private static final String URL ="http://localhost/Web_Service.asmx?";// you can use   IP address instead of localhost
private static final String METHOD_NAME = "Function_Name";
private static final String SOAP_ACTION = NAMESPACE+METHOD_NAME;

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
request.addProperty("parm_name",prm_value);// Parameter for Method
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);//call the eb service Method
} catch (Exception e) {
e.printStackTrace();}//Next task is to get Response and format that response
SoapObject obj,obj1,obj2,obj3;
obj= (SoapObject) envelope.getResponse();
obj1=(SoapObject) obj.getProperty("diffgram");
obj2=(SoapObject) obj1.getProperty("NewDataSet");
for(int i=0;i<obj2.getPropertyCount();i++)//the method getPropertyCount() return the number of rows
{
obj3=(SoapObject) obj2.getProperty(i);  
obj3.getProperty(0).toString();//value of column 1
obj3.getProperty(1).toString();//value of column 2
//like that you will get value from each column
}

Если у вас есть какие-либо проблемы по этому поводу, вы можете написать мне ..

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

попробуйте развернуть службу в IIS.

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

Получите файл jar «ksoap2-android» из здесь .

Добавьте это как «Добавить внешний JAR» в ваш проект Eclipse.

Затем используйте AndroidHttpTransportобъект, как показано в фрагменте кода ниже:

try 
        {
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
            request.addProperty("a", "15");
            request.addProperty("b", "20");
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true; 
            envelope.setOutputSoapObject(request);
            AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL);
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
            returnMessage = result.toString();
        }
        catch (SoapFault sf){
            returnMessage = "FAULT:\n";
            String faultString = "Code: " + sf.faultcode + "\nString: " +
            sf.faultstring;
            Log.d(TAG , "fault : " + faultString);
            returnMessage += faultString;
        }
        catch( Exception e )
        {
            Log.d(TAG , "exception e = "+ e.getMessage());
            returnMessage = "Call Exception:" + e.toString();
        }


    return returnMessage;

Надеюсь, это поможет.

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

Если вы запускаете веб-сервис .Net в режиме отладки VS2010, вы, скорее всего, используете веб-сервер Cassini. К сожалению, удаленный доступ к сайтам, размещенным на Cassini, невозможен:

Конечно, вы можете сделать переадресацию портов , чтобы обойти это ограничение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...