代码之家  ›  专栏  ›  技术社区  ›  Carlo

动态Web服务请求

  •  0
  • Carlo  · 技术社区  · 14 年前

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

    http://mywebservice.com/ 身份证件 /服务计量

    不管怎样,我不知道如何手动操作。我不能引用这些服务,因为我必须在应用程序中添加大量的Web引用,这似乎不太好做。

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

    谢谢!

    1 回复  |  直到 10 年前
        1
  •  1
  •   indyfromoz    14 年前

    根据我的经验,使用RESTful Web服务设计和构建Windows Phone应用程序非常容易。在只有SOAP XML Web服务可以使用的情况下,需要在应用程序中做一些工作来准备请求、发送请求和解析响应。

    您可以像这样将WebService URL存储为字符串“template”-

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

    当您要发出请求时,只需格式化字符串-

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

    如果您有SOAP XML请求格式,那么将其存储为模板。当您需要发出请求时,用实际值替换占位符并发送请求(如果Web服务希望这样做,则使用post选项)。典型的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
      }
    }
    

    希望这能给你一些建议。

    因德罗莫茨