我正在尝试将SOAP请求动态发送到不同的Web服务。每个Web服务都有自己的ID,所以我基本上只需要更改URL中的Web服务ID,即:。
http://mywebservice.com/的 ID / servicedosomething
无论如何,我不知道如何手动执行此操作。我无法引用这些服务,因为我必须在应用程序中添加大量的Web引用,这似乎不太好。
无论如何,我只想知道如何构造SOAP请求,发送它,并从服务中获取结果。顺便说一下,我已经检查了类似问题的其他解决方案,没有一个对我有用,可能是WP7框架或其他东西。
谢谢!
答案 0 :(得分:1)
根据我的经验,使用RESTful 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并添加CustomerID。要发出请求,请使用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