Udostępnij za pośrednictwem


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 removed

  • Anonymous
    March 16, 2008
    The comment has been removed

  • Anonymous
    March 16, 2008
    The comment has been removed

  • Anonymous
    March 16, 2008
    The comment has been removed

  • Anonymous
    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もブログを信じるなら一時的な情報提供サイトとなりますので、ご興味のある方はお早めにダウンロードしてくださるようお願いいたします。