アーカイブ

Archive for 2010年5月

WCF RIA Services:ページングの追加

DataGridにページングを追加するのはとても簡単です。
まず、ツールボックスからDataPagerをドラッグ アンド ドロップして追加します。

DataPager

次にデータソースからPersonをDataPagerに対してドラッグ アンド ドロップします。

DataPagerとデータソースの関連付け

DataPagerのPageSizeプロパティを適当な値に設定します。
ここでは2にしてみました。
この状態で実行してみましょう。

実行結果

PageSizeで指定したとおり、2件のデータだけが表示されます。
ただ、次のページを表示させようとすると、エラーが表示されます。

エラー

どうもGetPersonメソッドに問題があるようです。
DomainService1クラスでデータを取り出すGetPersonメソッドを確認してみます。

    public IQueryable<Person> GetPerson()
    {
        return this.ObjectContext.Person;
    }

このとおりOrderByの指定がないので、エラーで要求されているようにこの指定を追加します。
id順に表示するようにしておきます。

    public IQueryable<Person> GetPerson()
    {
        return this.ObjectContext.Person.OrderBy(p => p.id);
    }

再度実行してみましょう。
今度はページの移動が可能です。

3ページ目を表示

ページングに関しては、実はこれだけの作業しかありません。
ただ、このページング、ページが遷移した際に必要なデータをとってきているのか、それともあらかじめすべてのデータをクライアント側に取り出していてそのデータをもとにページングを行っているのか、気になるところだと思います。
これを調べてみましょう。

DomainService1クラスにQueryメソッドを追加します。
QueryメソッドはDomainService1クラスの親のLinqToEntitiesDomainServiceクラスの親のDomainServiceクラスにviretualなメソッドとして定義されています。
このため、DomainService1クラス内でoverrideと入力し、スペースを押して表示されるインテリセンスからQueryメソッドを選択すれば、自動的に継承元のQueryメソッドを呼び出すための適切なソースが挿入されます。
このQueryメソッドにブレークポイントを設定して実行します。

初期表示時のクエリ

初期表示の場合、Queryメソッドには"Person[].Take(2)"というクエリが渡されていることがわかります。
これは最初の2件だけを取り出すLINQのクエリになります。
これが例えば3ページ目を表示する場合だと次のように変わります

3ページ目表示時のクエリ

"Person[].Skip(4).Take(2)"というのは最初から4つのデータ(2ページ分)をとばして、その次から2件取り出す、というクエリです。
OrderByを追加する前のエラーはこのSkipを実行しようとして発生したエラーでした。

この結果から、ページングではLINQを利用し、必要なデータだけを毎回取り出していることが確認できます。

なお、DataGridでは項目名をクリックすることでその項目での並べ替えが可能です。

年齢逆順ソート

こんな場合にどのようなクエリが実行されているのか、とか確認してみるのも面白いと思います。

カテゴリー:Silverlight, WCF RIA Services

WCF RIA Services:項目の表示名と表示順の変更

とりあえず動かしてみたWCF RIA Servicesですが、このときの実行結果をみると項目の並び順がアルファベット順になっています。

デフォルト実行

ウィザードで生成されたDomainService1.metadata.csファイルの中を見ると、この時点でプロパティがアルファベット順となっていることがわかります。

———————————————————————-

    [MetadataTypeAttribute(typeof(Person.PersonMetadata))]
    public partial class Person
    {
        internal sealed class PersonMetadata
        {
            private PersonMetadata()
            {
            }

            public int age { get; set; }
            public int id { get; set; }
            public string mail { get; set; }
            public string memo { get; set; }
            public string name { get; set; }
        }
    }

———————————————————————-

この並び順を変更するためにDisplay属性を利用することができます。
Display属性では表示する項目名の変更もできますので、ついでにその設定もしてしまいましょう。
DomainService1.metadata.csファイルの中を以下のように書き換えます。

———————————————————————-

    [MetadataTypeAttribute(typeof(Person.PersonMetadata))]
    public partial class Person
    {
        internal sealed class PersonMetadata
        {
            private PersonMetadata()
            {
            }

            [Display(Name = "年齢", Order = 2)]
            public int age { get; set; }

            [Display(Name="ユーザID", Order=0)]
            public int id { get; set; }

            [Display(Name = "メールアドレス", Order = 3)]
            public string mail { get; set; }

            [Display(Name = "備考", Order = 4)]
            public string memo { get; set; }

            [Display(Name = "名前", Order = 1)]
            public string name { get; set; }
        }
    }

———————————————————————-

ビルドを実行した後で、すでに追加していたDataGridを削除し、もう一度データソースからPersonをドラッグ アンド ドロップして新たにDataGridを追加します。

DataGrid変更

これで表示される項目名と項目の順序が変更されました。
実際に実行して、結果を確認してみましょう。

項目変更後

Silverlightプロジェクト側で自動生成されているプログラムの中に、Webプロジェクト側で追加した上記のDisplay属性が自動的に追加されていることを確認しておきましょう。

カテゴリー:Silverlight, WCF RIA Services

WCF RIA Services:とりあえず動かしてみる

まだ英語版しかでていませんが、Silverlight 4の開発ツールとそれに含まれるWCF RIA Servicesが正式にリリースされました。
ずっと気にしていたWCF RIA Servicesについて、触ってみてわかったところからBlogにまとめていきたいと思います。
今回はとりあえず動かしてみるところから。

まずはSilverlightアプリケーションを作成します。

  1_

アプリケーションの設定が確認されるので、ここで「WCF RIA サービスを有効にする」にチェックを入れます。

 image

クライアント側のSilverlightプロジェクトとサーバ側のWebプロジェクトが作成されます。
Webプロジェクト側にApp_Dataフォルダを追加してその中にデータベースを追加し、Entity Data Model(EDM)を作成するところまではいつもの作業なので省略します。

  image_3

EDMを追加したら、必ずビルドを実行します。
Silverlightに限らず、Webアプリケーションプロジェクトではソースの修正後にビルドを実行しないとウィザードから追加したクラスを選択できなかったり、インテリセンスが効かなかったり、といった状況に陥ることがあります。
なにか操作をしたら"まずビルド"は徹底しておきましょう。

ここからがWCF RIA Servicesとしての作業になります。
新しい項目の追加でDomain Service Classを追加します。

 4_DomainService

どのEntityを対象とするかが聞かれるので、Personにチェックを入れ、ついでにEnable editingにもチェックをいれておきましょう。
このエントリではEnable editingのチェックは関係ありませんが、先にすすんだときに必要になります。
また、Personにチェックをいれると、自動的にmetadataクラスの生成にもチェックが入ります。

 image_4

このウィザードの実行によって、DomainService1.csファイルとDomainService1.metadata.csファイルがWebプロジェクトに追加されます。
ここでも必ずビルドを実行します。
これで一旦Webプロジェクト側での作業は終了です。

SilverlightプロジェクトのMainPage.xamlを表示し、データソースウィンドウを表示します。
データソースウィンドウに表示されているPersonをMainPageにドラッグ アンド ドロップします。

 image_5

自動的にDataGridが追加されるので、適当に位置を調整します。

 7_DataGrid

とりあえずここまででデバッグ実行を開始します。
ブラウザが開いて、そこにデータが表示されます。

 8_

Silverlightクライアントにデータを取得して表示するところまでがまったくコーディングをせずにできてしまいました。

Silverlight側ではデータソースからのドラッグ アンド ドロップでDataGridを追加した以外何もしていないように見えますが、本当はそうではありません。
ソリューションエクスプローラーでもデフォルトの状態では何も起きていないように見えます。

 9_

ですが、すべてのファイルを表示させると、Generated_Codeフォルダの中にクラスファイルが存在しているのがわかります。

 10_

実はこのファイル、Webプロジェクト側で作成したDomainServiceのクラスをもとに、ビルド時に自動的に生成されるもので、エンティティクラスやWebプロジェクトと通信を行うためのプログラムが含まれています。

この自動生成されたプログラムにたいしてデータを配信するWebプロジェクト側のサービスも特に作成していません。
このデータ配信のサービスの部分はモジュール化されていて、DomainServiceクラスを追加することでWebプロジェクトに組み込まれます。
データ配信サービスについては以前紹介したこのBlogの記事が参考になるので読んでおくといいと思います。

カテゴリー:Silverlight, WCF RIA Services

Silverlight 4の開発環境がRTW(ただし英語版)

Microsoft Silverlight 4 Tools for Visual Studio 2010

Silverlight 4 の開発環境が正式リリースされました。
関係者のいろんなBlogで取り上げられてますが、重点を置いている内容がそれぞれで微妙に異なるので気になったところは全部あげておきます。

Silverlight 4 Tools for VS 2010 and WCF RIA Services Released
WCF RIA Services v1.0 and Silverlight Tools for Visual Studio 2010 are Here!
RIA Services – v1 Shipped!
Silverlight 4 Tools, WCF RIA Services and Themes Released
WCF RIA Services v1.0 Released to the web!!
Final Release of Silverlight 4 Tools for Visual Studio 2010 is now available!

Silverlight4_Tools をインストールすると、VS2010のWPFエディタ(?)もアップデートされるようです。
WPFでの開発を行っている人はSilverlightの開発をしない場合でも適用を検討したほうがよいかも。

現時点では英語版だけのリリースで、各国語版は6月になるようですね。
それが待ちきれないという(私のような)人は、英語版のVWD2010をインストールしましょう。
VWD(VS2010も)は英語版と日本語版の両方を入れて、場合によって設定を切り替えて使う、ということが可能です。
英語版のVWDが入っていれば英語版のSilverlight4_Tools をインストールできます。
インストールさえできてしまえば、日本語版の設定でもSilverlight 4の開発が可能です。

#さて、正式版になったことだし、試してみた情報をまとめはじめようか。。。

カテゴリー:.NET, Silverlight

Silverlight security overviewを訳してくれた人が!

"Silverlight Security Overview" を訳してみた

つぶやいてみるもんですね(w
ということでSilverlight security overviewをmohnoさんが訳して公開してくれています。
さっそく読まなくちゃ。

カテゴリー:.NET, Silverlight

WCF RIA Services で DomainService はどのように動くのか?

Silverlight and WCF RIA Services (2 – Services)

WCF RIA Services の一部として提供される DomainServiceが実際にはどのように動いているかを細かく解説してくれています。
このあたり、隠蔽されているところなのでソースでも見ないと仕組みは理解できないかなあ、と思っていたのでうれしい記事です。
ここまで解説されていれば、あとは自分でなにかあったときたどる方法もなんとか探せそう。

まだ続くようなのでどんな話がでてくるか楽しみだなぁ。。。

カテゴリー:.NET, Silverlight

Silverlight security overview が正式公開

Silverlight security overview paper has been officially published

Silverlight のセキュリティについてまとまった資料がダウンロードできるようになっています。

日本語訳希望、とつぶやいてみる。。。(w

カテゴリー:.NET, Silverlight