Visual Studio 8.0 β2からSilverlightアプリケーションをする方法として一番簡単なものは、Silverlightプロジェクトをアクティブにしてデバッグ実行すること。Silverlightアプリケーション作成ウィザードで生成されたテストページをてブラウザがローカルファイルとして読み込み、ブラウザとデバッガが通信してデバッグできる。

しかし、BrowserHttpWebRequestクラスで通信しようとすると問題が起きる。クロスサイトスプリクティング防止のため、ローカルファイルとして読み込まれたページから同クラスを用いた通信はできないよう制限されているので、正常ロジックを通すことができない。

そこで、テストページをローカルファイルとしてではなくHTTP通信経路で取得するようにして、そのページをデバッガで追うための手順をwebで探した。

ところが本家の手順を踏んでもまっさらなページが表示されるだけでデバッグできない。他の情報を当たってもテキトーな方法を書いたものしかみつからない(“ここ”など)。困ってるのは自分だけなのなぁ、と試行錯誤と情報の断片の掻き集めとを続けて、ようやくそれらしい方法がわかった。

使用したもの

(以下は http://silverlight.org/GetStarted/ からリンクが張られている)

  • Visual Studio 2008 β2
  • Silverlight 1.1 Alpha Refresh
  • Microsoft ASP.NET Futures (July 2007)
  • Microsoft Silverlight Tools Alpha Refresh for Visual Studio (July 2007)

デバッグ手順

  1. Visual StudioでSilverlightプロジェクトを含むソリューションを開く

  2. ソリューションエクスプローラで、ソリューション項目を右クリックして、[Add][New Project...]を選択

  3. ASP.Net AJAX Features Web Applicationプロジェクトを作成

  4. ソリューションエクスプローラで、作成した ASP.NET プロジェクト項目を右クリックして、コンテキストメニューから Add Silverlight Link を選択

  5. 確認ダイアログで OK をクリック

  6. default.aspx をダブルクリックしてコードをエディタに表示させる

  7. <body>開始タグに続けて次のコードを追加

        <asp:Xaml runat="server" XamlUrl="~/Page.xaml" Width="640" Height="640" />
    
  8. ASP.NET プロジェクト項目で右クリックし、Properties をクリック

  9. Webページで、Specific Port を選択し、適当なポート(22000)を指定して通信ポートを固定

  10. Silverlightアプリケーションの通信部分のコードに記述したURLをテスト用に書き換える。(http://example.com/data.xml -> http://localhost:22000/data.xml)

  11. ASP.NET プロジェクト項目で右クリックし、Set as Startup Project をクリック

  12. default.aspx を右クリックして、Set as Start Page をクリック

  13. F5でデバッガ起動。Silverlight デバッグを有効にしたいかどうか確認されたら、Yes をクリック

これでSilverlightアプリケーションのコードをデバッガで追えるようになっているはず。