基于HTTP的Web服务XML

本文关键字:服务 XML Web HTTP 基于 | 更新日期: 2023-09-27 18:04:28

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

基于HTTP的Web服务XML

获取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表单数据等。你也有"async"方法

    using (var client = new WebClient()) 
    {
       var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
       // process xml
    } 
    
  3. 你可以把"HttpWebRequest"看作是一个web请求的底层实现。

下面是一段代码片段,可以帮助您做到这一点。

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

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

查看WCF REST开发人员中心-它向您展示了如何使用WCF基础设施轻松高效地创建REST服务(不使用SOAP)。

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