使用Soap服务:如何从android发送对此web服务的请求

时间:2011-08-18 09:35:15

标签: android ksoap2 android-ksoap2

        This is my coding:

            private static final String METHOD_NAME ="total";

             private static final String NAMESPACE ="http://tempuri.org/";
             private static final String SOAP_ACTION ="http://tempuri.org/total";
             private static final String URL ="http://10.0.2.2:1743/Service1.asmx";
             private TextView tv;
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                tv = (TextView) findViewById(R.id.tv);
                tv.setText(ws());
            }
            private String ws() {
                String result = "";
                try {

                    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);    

                System.out.println("ohaih");
                    request.addProperty("Name","chris");
                    request.addProperty("num1",5);
                    request.addProperty("num2",5);

                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                            SoapEnvelope.VER11);

                    envelope.dotNet = true;

                    envelope.setOutputSoapObject(request);


                    HttpTransportSE ht = new HttpTransportSE(URL);

                    ht.call(SOAP_ACTION, envelope);
        System.out.println("dfdjssf");

                    if(envelope.getResponse()!=null){
                    //SoapObject response = (SoapObject)envelope.bodyIn;
                        Object response = envelope.getResponse();
                        result = response.toString();
                    }

                } catch (Exception e) {
                    result = e.getMessage();
                }
                return result;
            }
        }


    webservice coding:

       <System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
        <System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
        <ToolboxItem(False)> _
        Public Class Service1
            Inherits System.Web.Services.WebService
            Public Class InfoRequest

                Private NameField As String
                Private num1field As Integer
                Private num2field As Integer
                '''<remarks/>
                Public Property Name() As String
                    Get
                        Return Me.NameField
                    End Get
                    Set(ByVal value As String)
                        Me.NameField = value
                    End Set
                End Property
                '''<remarks/>
                Public Property num1() As Integer
                    Get
                        Return Me.num1field
                    End Get
                    Set(ByVal value As Integer)
                        Me.num1field = value
                    End Set
                End Property
                '''<remarks/>
                Public Property num2() As Integer
                    Get
                        Return Me.num2field
                    End Get
                    Set(ByVal value As Integer)
                        Me.num2field = value
                    End Set
                End Property

            End Class
            Public Class InfoResponse

                Private totalField As Integer

                '''<remarks/>
                Public Property total() As Integer
                    Get
                        Return Me.totalField
                    End Get
                    Set(ByVal value As Integer)
                        Me.totalField = value
                    End Set
                End Property

            End Class
            <WebMethod()> _
            Public Function total(ByVal validationRequest As InfoRequest) As InfoResponse
                Dim resp As New InfoResponse
                Dim req = validationRequest

                Dim name As String = req.Name
                Dim num1 As Integer = req.num1
                Dim num2 As Integer = req.num2
                Dim tot As Integer = num1 + num2
                resp.total = tot
                Return resp
            End Function

        End Class



    WEBSERVICE:



    REQUEST:

    <?xml version="1.0" encoding="utf-8"?>
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
        <total xmlns="http://tempuri.org/">
          <validationRequest>
            <Name>string</Name>
            <num1>int</num1>
            <num2>int</num2>
          </validationRequest>
        </total>
      </soap:Body>
    </soap:Envelope>


RESPONCE:


?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <HelloWorldResponse xmlns="http://tempuri.org/">
      <HelloWorldResult>int</HelloWorldResult>
    </HelloWorldResponse>
  </soap:Body>
</soap:Envelope>

1 个答案:

答案 0 :(得分:0)

在您的SOAP请求中, <validationRequest> 是一种复杂的请求类型,您无法在request中添加该属性,就像通常对基本类型所做的那样。

您需要创建一个 extends Vector implements KVMSerializable 的类。

public class ValidationReq extends Vector<String> implements KvmSerializable {


        @Override
        public Object getProperty(int arg0) {
                return this.get(arg0);
        }

        @Override
        public int getPropertyCount() {
                return this.size();
        }

        @Override
        public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
                arg2.name = "string";
                arg2.type = PropertyInfo.STRING_CLASS;
        }

        @Override
        public void setProperty(int arg0, Object arg1) {
                this.add(arg1.toString());
        }

}

您的类将包含您要发送的参数,您需要将该类的对象添加到request

示例代码段可在official KSOAP documentation

中找到