MIX08 のIronRuby Hol を使用するときの注意点
dynamicsilverlightというサイトで、ソースコードとハンズオンラボの内容があるとご連絡しました。ここで公開されているFlickrを使ったラボを実行するには、必ず提供されているフォルダで「scrtipt\server.bat」を実行するようにしてください。というのは、Holとして公開されているDLRなどのバージョンが、「2.0.5.100」となっているからです。Silverlight 2.0 Beta1 SDKに含まれているDLRのバージョンは「2.0.5.0」なのです。このため2.0.5.100のDLRでは、2.0.5.0のManaged JScriptをロードすることができません。IronPython、JScript、IronRubyの3言語を試される場合は、Silverlight 2.0 Beta1 SDKに含まれるアセンブリを使用してください。IronRubyとIronPythonのみの場合であれば、2.0.5.100でも問題はありません。
詳細に調べたわけではありませんが、MIX08のハンズオンで試した結果、Flickrを使うサンプルでは、HTMLのボタンのイベントハンドラをRubyで定義しています。このイベントハンドラの登録が、Silverlight 2.0 Beta1 SDKのアセンブリでは失敗することを確認しています。これらの問題を修正したのが、2.0.5.100のようです。
またFlickrを使ったサンプルなどは、Silverlightにおけるクロスドメインの問題が発生します。これを避けるにはポリシーファイルを作成するか、Chiron.exeユーティリティを使用します。 相手側のサービスの設定によってはクロスドメインの問題が発生します。flickrの場合は、https://api.flickr.com/crossdomain.xmlというポリシーが設定されていますので正常に動作します。このハンズオンでは「script\server.bat」というバッチファイルが用意されており、「chiron.exe /b /r:libs」というコマンドを動かすようになっています。これはChironユーティリティが持つ、テスト用のhttpdを起動してからブラウザを起動するオプションです。このモードで起動すると、オンザフライでXAPパッケージ(アプリケーションマニフェストも)を生成します。このXAPパッケージは、インメモリで作成され、httpレスポンスとしてブラウザに返すようになっています。このときに注意しないといけないのが、物理的なファイルとしてXAPパッケージが存在する場合です。Chironが用意しているhttpdは、物理ファイルが存在すると、その物理ファイルを返すようになっているからです。また、Chironは「localhost:2060」を起動します。このプロセスを終了するには、ブラウザで「localhost:2060/bye!」と入力するか、コンソールでCTRL+Cを入力します。
SilverlightのドキュメントでLoadRootVisualメソッドの記述が以下のようになっていますが
self.scene = Application.Current.LoadRootVisual("app.xaml")
正しくは、以下のようになります。
self.scene = Application.Current.LoadRootVisual(Canvas(), "app.xaml")
ドキュメントのLoadRootVisualメソッドの説明は正しくなっていますが、上記の例が間違っていますので、ご注意ください。もちろん使用される言語によって、Canvasクラスへの参照を追加していただく必要はあります(Pythonはimportなど、JScriptではImport、RubyではIncludeなど)。
追記:っき さんからの質問から
Flickrサンプルのクロスドメイン問題は、私の記述が間違っていましたので訂正します。Silverlightのクロスドメインへのアクセスに関する設定は、サービスを提供する側での設定となります。つまり、Client - Serverとなっていた場合にServer側で設定する必要があります。この設定には、crossdomain.xmlというファイルかclientaccesspolicy.xmlというファイルをルート直下に配置します。そしてflickrの場合は、「allow-access-from domain="*"」という設定がなされています。
追記:LoadRootVisualですが、https://silverlight.net/Quickstarts/ProgramDlr.aspxでは正しくなっているのを確認しています。このクイックスタートでは、UserControlのインスタンスを渡すようになっています。
Comments
Anonymous
March 16, 2008
The comment has been removedAnonymous
March 16, 2008
The comment has been removedAnonymous
March 16, 2008
The comment has been removedAnonymous
March 16, 2008
The comment has been removedAnonymous
March 17, 2008
おっしゃる通り、Silverlight.js の大文字、小文字の件は、サンプルの index.html に "silverlight.js" と書いてあったために、URLの大文字、小文字を区別するWebサーバでは Silverlight.js を読み込めなかったという話でした。 単にサンプルが非Windows系のWebサーバを考慮してなかっただけだと思います。 #dynamic-silverlight.zip は、今現在は、http://dynamicsilverlight.net/get/ の"Dynamic Silverlight SDK" のリンクから入手可能のようです。Anonymous
March 17, 2008
っきさん、有難うございます。 >サンプルが非Windows系のWebサーバを考慮してなかっただけだと思います。 そのようですね。 >"Dynamic Silverlight SDK" のリンク 確か、そうですね。SDKという名称に勘違いしておりました。 重ね重ね、ご指摘いただいて有難うございます。 dynamicsilverlight.netのサイトが何時まで存続するのかを私は確認していませんが、John Lamもブログを信じるなら一時的な情報提供サイトとなりますので、ご興味のある方はお早めにダウンロードしてくださるようお願いいたします。