2010-10-22 148 views
0

我想動態地發送一個SOAP請求到不同的web服務。每個Web服務都有自己的ID,所以我基本上只是要改變web服務的ID在URL中,EG:動態web服務請求

http://mywebservice.com/ ID/servicedosomething

無論如何,我不不知道如何手動執行此操作。我無法引用這些服務,因爲我必須在應用程序中添加大量的Web引用,這看起來不太好。

無論如何,我只想知道如何構建SOAP請求,發送它,並從服務中獲取結果。順便說一句,我已經檢查了類似問題的其他解決方案,沒有爲我工作,可能是WP7框架或什麼的。

謝謝!

回答

1

根據我的經驗,使用REST風格的Web服務設計和構建Windows Phone應用程序非常簡單。在只有SOAP XML Web服務可以使用的情況下,您需要在應用程序內部完成一些工作,以準備請求,發送請求並解析響應。

您可以將web服務URL作爲一個字符串「模板」像這樣 -

string wsUrlTemplate = "http://mywebservice.com/{0}/servicedosomething"; 

當你即將發出的請求,只是格式化字符串 -

string wsUrl = string.Format(wsUrlTemplate, webServiceID); 

如果你有SOAP XML請求格式,然後將其存儲爲模板。當您需要發出請求時,請用實際值替換佔位符併發送請求(使用POST選項,如果這是Web服務期望的)。一個典型的SOAP XML請求模板可能看起來像 -

string xmlRequestTemplate = " 
<?xml version="1.0" encoding="utf-8" ?> 
<Customer> 
    <CustomerID>{0}</Customer> 
</Customer>" 

準備請求XML,你採取同樣的方法和上面 - 字符串格式xmlRequestTemplate並添加客戶ID。要發出請求,請使用HttpWebRequest異步發出請求,並在響應處理程序中解析XML響應。

var request = HttpWebRequest.Create(wsUrl); 
var result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request); 

private void ResponseCallback(IAsyncResult result) 
{ 
    var request = (HttpWebRequest)result.AsyncState; 
    var response = request.EndGetResponse(result); 

    using (var stream = response.GetResponseStream()) 
    using (var reader = new StreamReader(stream)) 
    { 
    var contents = reader.ReadToEnd(); 
    // Parse the XML response 
    } 
} 

希望這給你一些想法繼續。

indyfromoz

+0

它的確如此。我現在開始工作了。謝謝!你知道如何在請求btw中放一個頭文件嗎?我正在嘗試,但我不斷收到錯誤。我是新手,所以我不知道從哪裏開始尋找。我得到「'POST'標題不能直接修改,當我這樣做request.Headers [」POST「] = headerString; – Carlo 2010-10-22 18:44:55

+0

嗨,卡洛,我相信你可以像這樣設置標頭 - request.Headers [」Accept「] = 「application/json」;我不認爲你可以在請求頭中修改POST/GET/etc - indyfromoz – indyfromoz 2010-10-23 08:16:37