【问题标题】:Web service XML over HTTP基于 HTTP 的 Web 服务 XML
【发布时间】:2011-08-03 13:42:46
【问题描述】:

我正在尝试使用不使用 SOAP 和 WSDL 的 Web 服务,但我不知道该怎么做。我真的很感激一些指点。

服务的 API 是:

http://someaddress.com/webservices/name/id 其中 id 是参数。

支持的请求方法是 GET。

我可以用这样的东西吗:

var myReq = new XMLHttpRequest();
var url = "http://someaddress.com/webservices/name/2"
myReq.open("GET", url, true);
myReq.send();

【问题讨论】:

    标签: c# .net xml web-services http


    【解决方案1】:

    获取 xml 的最简单方法是使用 url 作为 XDocument.Load() 方法的参数。

    var xml = XDocument.Load("http:...");
    

    此方法从远程 url 获取数据,使用 XmlReader 解析它并构造一个 XDocument 对象。然后您可以使用 LINQ to XML 来查询或转换数据。

    很遗憾,这不适用于 POST、DELETE、PUT http 请求

    编辑: 这取决于您的服务以及您可以使用它执行哪些操作:

    1. 使用XDocument.Load() 是最简单的解决方案。如果这是 Internet 上的简单资源,不需要身份验证,不需要 HTTp 标头并且只支持 GET 请求,那么这就是要走的路。您可以编写一个方法来获取您的参数并将它们附加到 URL 中

      public SomeClass GetSomeEntity(string id) 
      {
          var xml = XDocument.Load("http://mywebservice.com/ws/" + id);
          // transform xml into an instance of actual type
      }
      
    2. 使用 WebClient 可以更好地控制 HttpRequest。您可以设置基本身份验证凭据、附加其他 HTTP 标头、POST 表单数据等。您也有“异步”方法。

      using (var client = new WebClient()) 
      {
         var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
         // process xml
      } 
      
    3. 您可以将“HttpWebRequest”视为 Web 请求的低级实现。

    【讨论】:

    • 谢谢!与 AJC 的示例相比,使用这种非常简单的方法有什么缺点吗?
    • 您无法控制公开的 http 请求:没有自定义标头,没有基本身份验证,没有异步方法。但是,如果这是 Internet 上的简单资源,并且您只能在 url 中使用参数“获取”它,而不是最简单的解决方案
    • @Andy Vasile 是对的,如果 XDocument.Load 满足您的要求,那是获取 xml 的最简单形式。两者都有效,请为您选择合适的解决方案,请不要忘记选择解决方案,以便偶然发现此问题的其他人也可以从中受益。 +1 为简单起见。
    【解决方案2】:

    这里有一段代码可以帮助你做到这一点..

    public static string SendRequest(string uri, string method, string contentType, string body)
    {
        string responseBody = String.Empty;
    
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(new Uri(uri));
        req.Method = method;
        if (!String.IsNullOrEmpty(contentType))
        {
            req.ContentType = contentType;
        }
        if (!String.IsNullOrEmpty(body))
        {
            byte[] bodyBytes = Encoding.UTF8.GetBytes(body);
            req.GetRequestStream().Write(bodyBytes, 0, bodyBytes.Length);
            req.GetRequestStream().Close();
        }
    
        HttpWebResponse resp;
        try
        {
            resp = (HttpWebResponse)req.GetResponse();
        }
        catch (WebException e)
        {
            resp = (HttpWebResponse)e.Response;
        }
    
        Stream respStream = resp.GetResponseStream();
        if (respStream != null)
        {
            responseBody = new StreamReader(respStream).ReadToEnd();
        }
    
        return responseBody;
    }
    

    【讨论】:

      【解决方案3】:

      WebClient 对象非常适合这类任务。

      【讨论】:

        【解决方案4】:

        查看WCF REST Developer Center - 它向您展示了使用 WCF 基础架构创建 REST 服务(无 SOAP)是多么容易和高效。

        【讨论】:

          【解决方案5】:

          据我所知,使用 JQuery 是最简单的。试试这是否适用于您的情况:

          var param = new Object();
              param.id = 2;
          
              $.ajax({
                  type: "GET",
                  url: "http://someaddress.com/webservices/name",
                  data: $.toJSON(param),
                  contentType: "application/json; charset=utf-8",
                  dataType: "json",
                  success: function (msg) {
                      if (msg.d) {
                        //do something 
                      } 
                  }
              });
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-10
            • 1970-01-01
            • 2023-03-06
            • 2016-01-18
            相关资源
            最近更新 更多