Fiddler2を使ってサーバとSivlerlightアプリケーションアプリ間の通信内容を確認する。

デバッグ中や通信内容のエビデンスを残す必要があるときなどに、Silverlightとサーバ間の通信内容を確認したいときがあります。そのようなとき、FiddlerというMS製ツールを使うと便利です。

アジェンダ

Fiddlerとは

Fiddlerは、ブラウザのプロキシとして動作し、ブラウザが行っている通信内容を表示できるツールです。Fiddlerを起動すると自動でIEのプロキシ設定が書き換わります。
インターネットオプション -> 接続タブ -> LANの設定ボタンを押すと表示されるローカル エリア ネットワーク(LAN)の設定ダイアログで設定内容を確認できます。
Fiddlerを立ち上げていないとき

Fiddlerを立ち上げているとき

Fiddlerのインストー

Download Fiddler Web Debugging Tool for Free by Telerik
.Net Framework2.0がインストールされていないマシンの場合、fiddlerインストール中にインストールするように促されます。忘れずに入れておきましょう。
ちなみに私の環境では、Fiddlerのインストール終了後、Fiddlerを立ち上げようとしたら、エラーで立ち上がりませんでした。Windows Update.Net Frameworkを更新したところうまく立ち上がりました。うまく実行できなかった方は.Net Frameworkの更新を試してみてください。

Fiddlerの制約

Fiddlerhttp://localhost/http://127.0.0.1/への通信内容はキャプチャできません。つまり、VisualStudioのサーバプロジェクトに配置されたWebサービスとのやり取りはキャプチャできません。もっとも、Webサービスのコードをコントロールできる状態にある場合は、Webサービスに渡された引数の内容をデバッガ確認すればよいので、あまり困ることはないと思います。

Fiddlerの動作確認

それでは、実際にFiddlerの動作する様子を見てみます。
Fiddlerを立ち上げて起き、Silverlightアプリで下記のような通信を行います。

WebClient proxy = new WebClient();
proxy.DownloadStringCompleted += new DownloadStringCompletedEventHandler(proxy_DownloadStringCompleted);

// 「Silverlight」をキーワードに検索する。
string baseUri = "http://search.twitter.com/search.atom?q=";
Uri uri = new Uri(baseUri + HttpUtility.UrlEncode("Silverlight"));
proxy.DownloadStringAsync(uri);

すると、Fiddlerは下記のような状態になります。

I.通信リストエリア

Fiddlerの右側にある通信リストエリアには、ブラウザが通信した内容がリストとして表示されます。

clientaccesspolicy.xmlを探しに行きましたが存在しなかったため、crossdomain.xml(フラッシュ用のクロスドメインポリシーファイル)を取得しようとしていることがわかります。そして、無事アクセス許可設定が見つかったため、実際のサーチを行っています。

II.リクエスト詳細エリアとIII.レスポンス詳細エリア

リクエスト詳細エリアとレスポンス詳細エリアでは、HttpHeaderやレスポンスのBodyを確認することができます。

これらの情報をファイルとして保存しておけば、テストのエビデンスとして使用することもできます。