2013-06-05 2 views
0

Я создал веб-сервис, используя .Net C#. Теперь я пытаюсь получить доступ к этому из приложения для Android, поэтому я попытался использовать KSOAP2.Android KSOAP с .Net Web Service

Это мой код.

final String NAMESPACE = "http://tempuri.org/"; 
final String METHOD_NAME = "HelloWorld"; 
final String SOAP_ACTION = "http://tempuri.org/HelloWorld"; 
final String URL = "http://localhost:61252/Service1.asmx"; 

new Thread() { 

public void run() { 
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
        envelope.dotNet=true; 
        envelope.setOutputSoapObject(request); 
        HttpTransportSE httpTransport = new HttpTransportSE(URL); 
        httpTransport.debug = true; 
        try { 
         httpTransport.call(SOAP_ACTION, envelope); 
         SoapObject result = (SoapObject) envelope.bodyIn; 

        } 
        catch (Exception e) { 
         // TODO: handle exception 
        }}}.start(); 

Но в этой линии

httpTransport.call(SOAP_ACTION, envelope); 

Он собирается в поймать блок и не имеет какое-либо сообщение об ошибке.

Я также нашел так много вопросов относительно этого, но поскольку я новичок в этом, я не могу найти, где я иду не так.

Я делаю правильный или есть какой-либо другой метод, который я могу использовать?

+1

в catch напишите эту строку 'e.printStackTrace();' и сообщите нам, какой журнал ошибок он показывает. – Lucifer

+0

попытайтесь отладить его и установите контрольные точки в try, а также catch catch. и проверьте свой ответ или исключение и предоставите нам журнал. –

+0

Спасибо, я попробовал проблему e.printStackTrace(), связанную с подключением к Интернету, не добавил использование-разрешения для Интернета, теперь он работает. – Giri

ответ

1
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);   
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE ht = new HttpTransportSE(URL); 
    ht.call(SOAP_ACTION, envelope); 
    final SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
    final String str = response.toString(); 

используйте это для вашего reference. Надеюсь, что это поможет вам.

+0

Спасибо .. Ссылка, которую вы дали, была полезна. – Giri

+0

@Giri вперед. счастливое кодирование. – Nirmal

3
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
// if required you can use addProperty to add properties in url 
      request.addProperty("User", "[email protected]"); 
      request.addProperty("Password", "abcd"); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
        SoapEnvelope.VER11); 
      envelope.headerOut = new Element[1]; 
      envelope.headerOut[0] = buildAuthHeader(); 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 

      // if you want to add any property you can add here. 

      /* 
      * PropertyInfo cityProp = new PropertyInfo(); 
      * 
      * cityProp.setType(String.class); request.addProperty(cityProp); 
      */ 

      Log.e("value of request", request.toString()); 
      Log.e("Value of envolope ", envelope.toString()); 

      HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    // add try catch block. 
      try { 

       androidHttpTransport.call(SOAP_ACTION, envelope); 
       Log.i("myAppEnvelope", envelope.toString()); 

       SoapObject response = (SoapObject) envelope.getResponse(); 
    // There are two types of Soap response (as per my knowledge or use) 
    // SoapObject or SoapPrimitive so check what is your response and use accordingly. 

    SoapObject data = (SoapObject) response 
         .getProperty("field_name"); 

    // OR 

    SoapPrimitive data = (SoapPrimitive) data.getProperty("field_name"); 
Смежные вопросы