我刚开始玩C#中的一些API。在我的表单中,我添加了服务引用http://wsf.cdyne.com/WeatherWS/Weather.asmx。一切都很好,我能够利用它的图书馆。现在我试图使用例如http://free.worldweatheronline.com/feed/apiusage.ashx?key=(key进入这里)& format = xml。 [我有一把钥匙]现在,当我尝试将它用作服务参考时,我无法使用。
我是否必须以我的形式调用它而不是引用它?或做某种转换?如果它的xml或json类型也很重要吗?
答案 0 :(得分:1)
ASMX是一项老技术,并且使用SOAP。 SOAP不倾向于使用查询字符串参数,它将参数作为消息的一部分。
ASHX是不同的(它可能是任何东西,它是在.NET中编写原始HTML / XML页面的一种方式),因此您无法将调用一个方法转移到另一个方法。它也没有服务引用,可能是您通过原始HTTP请求请求它。您需要使用服务文档来了解如何使用它。
答案 1 :(得分:0)
worldweatheronline
不返回WebService客户端可以使用的SOAP-XML。因此,您应该下载响应并使用许多REST服务解析它。
string url = "http://free.worldweatheronline.com/feed/apiusage.ashx?key=" + apikey;
using (WebClient wc = new WebClient())
{
string xml = wc.DownloadString(url);
var xDoc = XDocument.Parse(xml);
var result = xDoc.Descendants("usage")
.Select(u => new
{
Date = u.Element("date").Value,
DailyRequest = u.Element("daily_request").Value,
RequestPerHour = u.Element("request_per_hour").Value,
})
.ToList();
}
如果它的xml或json类型也重要吗?
不,最后你必须自己解析回复。
string url = "http://free.worldweatheronline.com/feed/apiusage.ashx?format=json&key=" + apikey;
using (WebClient wc = new WebClient())
{
string json = wc.DownloadString(url);
dynamic dynObj = JsonConvert.DeserializeObject(json);
var jArr = (JArray)dynObj.data.api_usage[0].usage;
var result = jArr.Select(u => new
{
Date = (string)u["date"],
DailyRequest = (string)u["daily_request"],
RequestPerHour = (string)u["request_per_hour"]
})
.ToList();
}
PS:我使用Json.Net来解析json字符串