在C#中使用Web服务

时间:2013-02-10 17:43:08

标签: c# web-services asmx

我刚开始玩C#中的一些API。在我的表单中,我添加了服务引用http://wsf.cdyne.com/WeatherWS/Weather.asmx。一切都很好,我能够利用它的图书馆。现在我试图使用例如http://free.worldweatheronline.com/feed/apiusage.ashx?key=(key进入这里)& format = xml。 [我有一把钥匙]现在,当我尝试将它用作服务参考时,我无法使用。

我是否必须以我的形式调用它而不是引用它?或做某种转换?如果它的xml或json类型也很重要吗?

2 个答案:

答案 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字符串