2011-08-18 103 views
1
 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> 
+0

您是否收到任何錯誤?這裏 – Randroid

+0

沒有錯,它運行但沒有響應。 – user878588

+0

檢查我的答案在這裏, http://stackoverflow.com/questions/6730144/how-to-use-soap-based-web-service-android/6730579#6730579 – Randroid

回答

0

在您的SOAP請求這個web服務, <validationRequest>是一個複雜的請求類型,你根本無法在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

示例代碼片段可在official KSOAP documentation中找到。