Web服务XML over HTTP

时间:2011-08-03 13:42:47

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

我正在尝试使用不使用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();

5 个答案:

答案 0 :(得分:4)

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

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

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

不幸的是,这不适用于POST,DELETE,PUT http请求

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

  1. 使用XDocument.Load()是最简单的解决方案。如果这是一个简单的互联网资源,没有身份验证,则不需要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请求的低级实现。

答案 1 :(得分:1)

以下是一段代码可以帮助您完成此操作。

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;
}

答案 2 :(得分:0)

WebClient对象可以很好地完成这些任务。

答案 3 :(得分:0)

查看WCF REST Developer Center - 它向您展示了如何使用WCF基础架构轻松高效地创建REST服务(无SOAP)。

答案 4 :(得分:0)

就我所知,使用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 
            } 
        }
    });