动态Web服务请求

时间:2010-10-22 01:33:53

标签: web-services soap windows-phone-7

我正在尝试将SOAP请求动态发送到不同的Web服务。每个Web服务都有自己的ID,所以我基本上只需要更改URL中的Web服务ID,即:。

http://mywebservice.com/的 ID / servicedosomething

无论如何,我不知道如何手动执行此操作。我无法引用这些服务,因为我必须在应用程序中添加大量的Web引用,这似乎不太好。

无论如何,我只想知道如何构造SOAP请求,发送它,并从服务中获取结果。顺便说一下,我已经检查了类似问题的其他解决方案,没有一个对我有用,可能是WP7框架或其他东西。

谢谢!

1 个答案:

答案 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