我正在尝试使用不使用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();
答案 0 :(得分:4)
获取xml的最简单方法是使用url作为XDocument.Load()方法的参数。
var xml = XDocument.Load("http:...");
此方法从远程URL获取数据,使用XmlReader解析它并构造XDocument对象。然后,您可以使用LINQ to XML来查询或转换数据。
不幸的是,这不适用于POST,DELETE,PUT http请求
编辑: 这取决于您的服务以及您可以使用它执行的操作:
使用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
}
使用WebClient可以更好地控制HttpRequest。您可以设置基本身份验证凭据,附加其他HTTP标头,POST表单数据等。您也有“异步”方法。
using (var client = new WebClient())
{
var xml = XDocument.Load(client.OpenRead("http://yoururl.com");
// process xml
}
您可以将“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
}
}
});