【问题标题】:consuming Soap service:how to send request for this webservice from android使用 Soap 服务:如何从 android 发送对此 Web 服务的请求
【发布时间】:2011-08-18 09:35:15
【问题描述】:
        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>

【问题讨论】:

  • 没有错误,它运行但没有响应。
  • 在这里查看我的答案,stackoverflow.com/questions/6730144/…
  • 我知道要消费soap webservice,但是这个webservice是由class和object组成的。我想知道如何发送这种类型的webservice的请求。
  • 第二种是什么类型的文件(webservice编码),是什么语言?
  • 对于发送请求,第一个文件就足够了,不需要写第二个文件(你已经展示过)。如果你使用.net webservices发送请求,你需要通过请求发送必填字段。 addProperty() 方法和 shd 将响应存储在变量中以在模拟器中显示结果(使用异步任务更好地解决此问题)。为此,请点击我提供给您的链接,祝您好运:)

标签: android ksoap2 android-ksoap2


【解决方案1】:

在您的 SOAP 请求中, &lt;validationRequest&gt; 是一种复杂的请求类型,您不能像通常对原始类型那样在request 中添加属性。

您需要创建一个类,其中 extends Vectorimplements 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

示例代码 sn-p 可以在official KSOAP documentation 中找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多