基于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();
获取xml的最简单方法是使用url作为XDocument.Load()方法的参数。
var xml = XDocument.Load("http:...");
该方法从远程url获取数据,使用XmlReader对其进行解析,并构造XDocument对象。然后,您可以使用LINQ to XML来查询或转换数据。
不幸的是,这对POST, DELETE, PUT http请求不起作用
编辑:这取决于你的服务和你可以用它做什么操作:
使用
XDocument.Load()
是最简单的解决方案。如果这是internet上的一个简单资源,不需要身份验证,不需要HTTp头,只支持GET请求,那么这就是可行的方法。你可以写一个方法,它接受你的参数,并把它们附加到URLpublic SomeClass GetSomeEntity(string id) { var xml = XDocument.Load("http://mywebservice.com/ws/" + id); // transform xml into an instance of actual type }
使用WebClient你可以得到更多的控制你的HttpRequest。您可以设置基本的身份验证凭证,附加其他HTTP标头,POST表单数据等。你也有"async"方法
using (var client = new WebClient()) { var xml = XDocument.Load(client.OpenRead("http://yoururl.com"); // process xml }
你可以把"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
}
}
});