2011-08-02 275 views
1

在我的應用我想發出一個SOAP請求某些URL,將要發送的SOAP請求如下發送SOAP請求

POST /TelLink/WrenchENTService.asmx HTTP/1.1 
Host: localhost 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://WrenchGlobal/GetToDoList" 

<?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> 
<GetToDoList xmlns="http://WrenchGlobal/"> 
    <viPeriod>int</viPeriod> 
    <vsUserID>string</vsUserID> 
    </GetToDoList> 
</soap:Body> 
</soap:Envelope> 

在上面的代碼中,我將不得不更換「INT」和帶有實際值的「字符串」,它將調用服務器上的GetToDoList。我的問題是,我不知道如何將此請求發送到服務器? (使用httppost)任何人都可以幫我嗎?

+1

[Android通過HTTP POST(SOAP)發送XML的可能的重複](http://stackoverflow.com/questions/2559948/android-sending-xml-via-http-post-soap) – balexandre

回答

1
int viPeriod; 
String vsUserID; 
String NAMESPACE = "http://WrenchGlobal/"; 
String SOAP_ACTION = "http://WrenchGlobal/GetToDoList"; 
String METHOD_NAME = "GetToDoList"; 

String result = null; 
Object resultRequestSOAP = null; 

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

request.addProperty("viPeriod", viPeriod); 
request.addProperty("vsUserID", vsUserID); 

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 

envelope.dotNet = true; 
envelope.setOutputSoapObject(request); 

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
androidHttpTransport.debug = true; 

try { 
    androidHttpTransport.call(SOAP_ACTION, envelope); 

    String requestDumpString = androidHttpTransport.requestDump; 
    System.out.println("requestDump : " + requestDumpString); 

    resultRequestSOAP = envelope.getResponse(); // Output received 
    result = resultRequestSOAP.toString(); // Result string 

    System.out.println("OUTPUT : " + result); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

希望這會有所幫助。

+0

謝謝。上述代碼中的NAMESPACE是什麼?我在上面的SOAP請求中有嗎?我不需要創建所有SOAP請求(在xml中)....? – Kishan

+0

我編輯了包含NAMESPACE(來自您提供的Web服務方法)和requestDump的答案。請求正以所需的xml格式發送,這可以從requestDump中理解。 – Ian

+0

在上面編輯的代碼中,SoapEnvelope.VER11是什麼?是否需要明確的關心,比如初始化或其他...?在行「androidHttpTransport.call(SOAP_ACTION,envelope);」我應該使用什麼作爲SOAP_ACTION ..? – Kishan

0

IntentServiceHttpPost可能是你想要的。 Google上有很多可用的摘要; here只是其中之一。

+0

謝謝。但我不明白在哪裏實際上我必須將上述肥皂請求嵌入到httppost對象中?我實際上可以如何將肥皂請求放在httppost對象中? – Kishan

+0

在這種情況下,你最好的選擇可能是圖書館。這裏有一個關於SOAP和Android的非常全面的討論:http://stackoverflow.com/questions/297586/how-to-call-soap-web-service-with-android – Paddy

+0

我想我可以用這個答案堆棧overfolw問題。 [鏈接](http://stackoverflow.com/questions/2559948/android-sending-xml-via-http-post-soap)。我對嗎? – Kishan