2011-09-14 50 views
0

DotNet Service和Android(Ksoap2)存在一個奇怪的問題。 我使用這個代碼:在Android中使用kso​​ap2將參數傳遞給webservice的問題

 // Création de la requête SOAP 
    SoapObject request = new SoapObject ("http://webservicesobject.url.fr/", "GetPatientWithIPPEmed"); 

    //Ajout de propriété: addProperty(nom de variable, valeur) -> Le nom de la variable vient du fichier WSDL 
    request.addProperty("IPPEmed", Integer.parseInt("10640137")); 
    request.addProperty("masque_de_donnee", Integer.parseInt("0")); 

    //Toutes les données demandées sont mises dans une enveloppe. 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    //Préparation de la requête 
    envelope.dotNet = true; 
    envelope.encodingStyle = SoapSerializationEnvelope.ENC; 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE androidHttpTransport = new HttpTransportSE("http://urlwebsite/service.asmx"); 
    //Ceci est optionnel, on l'utilise pour savoir si nous voulons ou non utiliser 
    //un paquet "sniffer" pour vérifier le message original (androidHttpTransport.requestDump) 
    androidHttpTransport.debug = true; 
    //Envoi de la requête 

    androidHttpTransport.call("http://webservicesobject.url.fr/GetPatientWithIPPEmed", envelope); 
    //Obtention du résultat 

    Object test = (Object)envelope.getResponse(); 
    SoapObject soapResult = (SoapObject)envelope.bodyIn; 
    int nb = soapResult.getPropertyCount(); 

    return soapResult; 

它運行像網絡的方法簡單的像一個魅力: - 字符串GetVersion() - 列表GetAllRooms()

但對於像參數的方法: - CRoom GetPatientWithIPPEmed(int IPPEmed,int masque_de_donnee)

對象測試的結果爲null!當然,如果我用IE調用這個方法,我有一個對象;)。

但是,我有這個SOAP消息:

<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"><v:Header /><v:Body><n0:GetPatientWithIPPEmed id="o0" c:root="1" xmlns:n0="http://webservicesobject.url.fr/"><IPPEmed i:type="d:int">10640137</IPPEmed> 
<masque_de_donnee i:type="d:int">0</masque_de_donnee> 
</n0:GetPatientWithIPPEmed></v:Body></v:Envelope> 

還是正確的SOAP消息必須是:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

<soap:Body> 
<GetPatientWithIPPEmed xmlns="http://webservicesobject.url.fr/"> 
<IPPEmed>10640137</IPPEmed> 
<masque_de_donnee>0</masque_de_donnee> 
</GetPatientWithIPPEmed> 
</soap:Body> 
</soap:Envelope> 

的問題一定是在這裏,我想:

<IPPEmed i:type="d:int">10640137</IPPEmed> 
<masque_de_donnee i:type="d:int">0</masque_de_donnee> 

但我怎樣才能生成正確的肥皂信息?

回答

0

看到這裏KSOAP的簡單的例子可以幫助refer

0

許多結果:

androidHttpTransport.call(SOAP_ACTION, envelope);      
SoapObject result = (SoapObject) envelope.getResponse();    
ArrayList<MyObject> list = new ArrayList<MyObject>(); 
    for(int i = 0; i < result.getPropertyCount(); i++){ 
      SoapObject soap = (SoapObject) result.getProperty(i); 
      MyObject obj = new MyObject(); 
      obj.setData(soap.getProperty("data").toString())); 
      obj.setOtherData(soap.getProperty("otherData").toString())); 
      list.add(obj); 
    } 

的一個結果:

androidHttpTransport.call(SOAP_ACTION, envelope);      
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();   
String r = result.toString(); 
相關問題