0

C# でいくつかの API をいじり始めました。私のフォームでは、サービス参照http://wsf.cdyne.com/WeatherWS/Weather.asmxを追加しました。すべてがうまく機能し、そのライブラリを利用できます。今、私は例えばhttp://free.worldweatheronline.com/feed/apiusage.ashx?key= (キーはここに入る)&format=xml を使用しようとしています。【鍵を持っています】サービスリファレンスとして使おうとしたら使えません。

参照するのではなく、自分のフォームで呼び出す必要がありますか? または何らかの変換を行いますか?また、そのタイプが xml か json かは重要ですか?

4

2 に答える 2

1

ASMXは古いテクノロジーであり、内部でSOAPを使用しています。SOAPは、クエリ文字列パラメータを処理する傾向がなく、メッセージの一部としてパラメータを取ります。

ASHXは別のものであるため(何でもかまいません。.NETで生のHTML / XMLページを作成する1つの方法です)、一方を他方に呼び出すためのメソッドを転送することはできません。また、サービス参照もありません。生のHTTPリクエストを介してリクエストする可能性があります。使用方法を見つけるには、サービスドキュメントを参照する必要があります。

于 2013-02-10T18:01:30.630 に答える
0

worldweatheronlineWebService クライアントが使用できる 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 文字列を解析しました

于 2013-02-10T21:20:42.040 に答える