ネタ元→Life is beautiful: 無名関数を使った非同期通信のススメ(JavaScript)
Silverlight でも WebClient や WebRequest を使って非同期呼び出しが可能だけど、結構面倒。ネタ元で紹介しているjQueryの例みたいに、サクッと記述できれば開発効率が良くなると思っていた。なので、私は次のようなヘルパークラスを作って利用している。
public static class WebHelper { public static void Get<TResult>(string url, Action<TResult> callback) { WebRequest request = WebRequest.Create(url); request.Method = "GET"; request.BeginGetResponse(result => { WebResponse response = request.EndGetResponse(result); using (Stream stream = response.GetResponseStream()) { XmlSerializer serializer = new XmlSerializer(typeof(TResult)); TResult data = (TResult)serializer.Deserialize(stream); if (callback != null) { callback(data); } } }, request); } // POST は省略 }
使い方はこんな感じ。
WebHelper.Get<Foo>(webapi_url, result => { doSomething(result); });
クライアント側がデシリアライズできるように、サービス側はデータをXMLで出力する必要がある。汎用的に使えるクラスじゃないけど、参考までにどうぞ。誰かがステキなクラスを作ってくれることに期待。