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の場合は、http://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ですが、http://silverlight.net/Quickstarts/ProgramDlr.aspxでは正しくなっているのを確認しています。このクイックスタートでは、UserControlのインスタンスを渡すようになっています。

Comments (6)

  1. っき より:

    dynamic-silverlight.zipの内のサンプルを、別途作成したXAPファイルと一緒にUPしてみたところ、クロスドメインの制限の影響は特に感じられなかったのですが、どの辺に影響してますでしょうか?

    クロスドメインの問題が、Chiron.exeユーティリティを使用すれば避けられるというのもよく分かりません。。。

    尚、UPした際に、Pythonのサンプルの一部が、Silverlight.js を silverlight.js で参照していたのでその部分の修正が必要でした。Chiron.exe は case-insensitive なのでファイル名の大文字小文字の違いに引っかからないようです。

  2. shozoa より:

    確かにUpしていただいたサンプルでは、クロスドメインの問題にあたらないようですね。

    基本的にWebClientやHttpWebRequestなどがクロスドメインに引っ掛かります。サイトに掲載していただいたflickrのサンプルをローカルのファイルシステムで実行したりすると、セキュリティ例外になります。この例外を避けるには、httpdでサンプルをホストする必要があります(これがChironを使う理由です)。

    今回の話では、私の説明が足りませんでしたの、追記をこれからしておきます。SilverLightのセキュリティポリシーでは、clientaccesspolicy.xmlというファイルかcrossdomain.xmlというポリシーファイルをサービス側に設定します。これで、クロスドメインのリクエストを許諾できるようになります。

  3. っき より:

    なるほど、確かにローカルなファイルだとXAPを置いても検索結果が表示されないですね。(クロスゾーン制限?)

    ひょっとして Chronが一般のWebサーバと異なる特殊なポリシー権限を持っているのかと思ったのですが、早とちりだったようです。

    丁寧な回答ありがとうございました。

  4. shozoa より:

    ええ、ご指摘いただいたようにクロスゾーンの制限だろうと思います。なので手軽にhttpdを使用できるChironが便利かなと。

    それと日本語でデモを見ることのできるサイトを作っていただいて、有難うございます。それよりもSilverlight.jsの大文字、小文字の方が気になりますけど。何故なら、Assetsフォルダのファイルは確かに大文字で始まっていますが、ChironがXAPパッケージに含めるわけではないからです。それよりもホストされているOS側が、大文字・小文字を区別しているんじゃないでしょうか。Windows系では、区別しませんので。

    #個人的にはdynamic-silverlight.zipが残っているのは知っているのですが、ダイレクトリンクが無くなっているので、私のBlogでは、わざとダイレクトリンクを記載していません。

  5. っき より:

    おっしゃる通り、Silverlight.js の大文字、小文字の件は、サンプルの index.html に "silverlight.js" と書いてあったために、URLの大文字、小文字を区別するWebサーバでは Silverlight.js を読み込めなかったという話でした。

    単にサンプルが非Windows系のWebサーバを考慮してなかっただけだと思います。

    #dynamic-silverlight.zip は、今現在は、http://dynamicsilverlight.net/get/ の"Dynamic Silverlight SDK" のリンクから入手可能のようです。

  6. shozoa より:

    っきさん、有難うございます。

    >サンプルが非Windows系のWebサーバを考慮してなかっただけだと思います。

    そのようですね。

    >"Dynamic Silverlight SDK" のリンク

    確か、そうですね。SDKという名称に勘違いしておりました。

    重ね重ね、ご指摘いただいて有難うございます。

    dynamicsilverlight.netのサイトが何時まで存続するのかを私は確認していませんが、John Lamもブログを信じるなら一時的な情報提供サイトとなりますので、ご興味のある方はお早めにダウンロードしてくださるようお願いいたします。

Skip to main content