GAE Webアプリケーションのクライアントとして Silverlight をつかい、デバッグを行う
訳あって Silverlight を触ることになりそうなので、学習がてら、昔つくったGAEのWebアプリの画面をつくってみようと思う。
環境は、Visual Web Developer 2010 Express
Silverlight の開発環境構築は、ここを参照。
で、タイトルの話。何が問題かというと、Silverlight アプリケーションを作成すると、
以下の様なダイアログが表示されて、Silverlight アプリケーションとともに、それをホストするWebアプリケーションプロジェクトが作成される。
この状態で、デバッグを開始すると、、、
アドホックなWebサーバー(?)が起動してそこにSilverlightアプリケーションがホストされた状態になり、デバッグも可能となっている。
まぁ、それはそれで良いのだろうが、GAE Web アプリケーションのクライアントを作成使用とすると、いくつか問題が。
問題1:相対URLが利用できない
アドホックなWebサーバーが、ベースのURLとなっているので、GAE アプリのサービスを呼ぶためには、絶対URLを指定しなければならないが、テストの場合は、http://localhost:8080 だし、本番の場合は、http://typea-service.appspot.com だ。設定などで切り替えるのは面倒くさい。
問題2:そもそも GAE のサービスを呼び出せない
で、絶対URLを指定して、GAE のサービスを呼び出すと、当然のごとく、クロスドメイン制約に引っかかりエラーとなる。
ということは、GAE Web アプリでホストする Silverlight アプリケーションをデバッグするには、デバッグビルドの出力先を、GAE の静的ファイルとして参照できるところにおいて、そこから起動して、デバッガをアタッチすれば、うまいこといけるのではないか?
で、まぁ自分が想定しているようにはいけたので、その手順など。
もっといいやりかたがあるかもしれないが、手順を忘れてしまいそうなのでメモ。
手順1:GAEの設定で、Silverlight のファイル置き場を作成する
ちなみに、GAE は Python。app.yaml に、静的ファイルを公開するディレクトリの設定を行う。
とりあえず、sl-client とでもして、以下の記述を追加する。
handlers: - url: /sl-client static_dir: sl-client
手順2:Silverlight のデバッグ用のファイル出力先を上記手順1:で指定したディレクトリに変更する
Silverlight プロジェクトのプロパティ から、ビルドタブ、出力パスに、上記手順1:の対象となるディレクトリを指定。
手順3:Web アプリケーションプロジェクトのカスタムWebサーバーのURLにGAEのURLを設定する
手順4:HTTPプロトコルの規定のプログラムをInternetExplorerに変更(Chrome等になっていれば)する
「コントロール パネル\すべてのコントロール パネル項目\既定のプログラム\既定のプログラムを設定する\プログラムの関連付けを設定する」 から実施。
どうもIEでないと、デバッガをアタッチできないようだ。 ブレークポイントで止めたり、できないのは不便なので、涙をのんでデフォルトの設定を変更する。
手順5:GAEを起動した状態で、デバッグを開始する
めでたく、期待通りの動きをしつつ、ブレークポイントでも停止してくれました。