用ksoup调用android调用服务

时间:2012-11-16 11:51:46

标签: android asp.net soap ksoap

我在这里创建了一个asp.net服务代码:

namespace ArttechApps
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string getBoughtApps(String imei)
        {
            return "this is the string to return";// JAVA : SOAP 
        }
    }
}

我需要一个调用此服务的android代码。 这是java代码:      public static void connect(String url)         {

        webServices ws=new webServices("getBoughtApps", "http://tempuri.org/", "http://localhost:12409/getApps.asmx");

        ws.AddProperty("imei", "000000000000000", String.class);

        String res="";
        try 
        {

            SoapObject respuesta = ws.CallWebService();

            res=respuesta.toString();

            Log.d("Response", res);
        } catch (Exception e) 
        {

            e.printStackTrace();
        }
        result=res;
    }

这是android的代码。将帖子 谁能帮助我做到这一点?

1 个答案:

答案 0 :(得分:3)

这里有一个我用来使用KSOAP2 for android

来使用Web服务的类
import org.ksoap2.transport.AndroidHttpTransport;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Log;

public class webServices {

    public static String METHOD_NAME;
    public static String NAMESPACE;
    public static String URL;   
    public SoapSerializationEnvelope Envelope_class = null; 
    private SoapObject request;

    public webServices(String NombreMetodo, String Namespace, String URLWService )
    {       
        METHOD_NAME = NombreMetodo;
        NAMESPACE= Namespace;
        URL= URLWService;   
        request= GetSoapObject(METHOD_NAME);
    }

    public void AddProperty(String Name, Object Value ,Type tipo)
    {
        PropertyInfo prop = new PropertyInfo();     
        prop.setName(Name);
        prop.setValue(Value);
        prop.setType(tipo);
        request.addProperty(prop);  
    }

    private SoapObject GetSoapObject (String Methodname)
    {
        return new SoapObject(NAMESPACE,METHOD_NAME);
    }

    private static SoapSerializationEnvelope GetEnvelope(SoapObject Soap)
    {
       SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
       envelope.dotNet = true;     
       envelope.setOutputSoapObject(Soap);
       return envelope;

     }

    public SoapObject CallWebService() throws IOException, XmlPullParserException 
    {       
        SoapObject response=null;
        SoapSerializationEnvelope Envelope = GetEnvelope(request);
        Envelope.bodyOut=request;
        AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL);
        androidHttpTransport.debug=true;
        try
           { 

               androidHttpTransport.call(NAMESPACE + METHOD_NAME, Envelope);              
               response = (SoapObject) Envelope.getResponse();      
               Envelope_class = Envelope;
           }
        catch(Exception e)
        {
            e.printStackTrace();
            Log.d("AndroidRequest",androidHttpTransport.requestDump);
            Log.d("AndroidResponse",androidHttpTransport.responseDump);
            return null;
        }   

        return response;
    }

    public Object CallWebServicePrimitive() throws SoapFault
    {
        SoapObject request = GetSoapObject(METHOD_NAME);    
        SoapSerializationEnvelope Envelope = GetEnvelope(request);

         HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
         try {
            androidHttpTransport.call(NAMESPACE + METHOD_NAME, Envelope);
        } catch (IOException e) {
            Log.d("ErrorApp", e.getMessage().toString());
        } catch (XmlPullParserException e) {
            Log.d("ErrorApp", e.getMessage().toString());
        }   

        SoapPrimitive response= (SoapPrimitive) Envelope.getResponse();
        return response;
    }

}

如果您使用的是WCF服务,则需要更改:

  

SoapSerializationEnvelope(SoapEnvelope.VER11):   SoapSerializationEnvelope(SoapEnvelope.VER12)

并将网址指向您的SVC网址