テスターですが何か?

ホビープログラマ略してHPです

WCF Data Servicesを試してみた(3)

leave a comment »

前回のエントリーの続き、これでWCF Data Serviceは最後です。作成したWCF Data ServicesにSilverlightアプリケーションからアクセスします。

1.Silverlightアプリケーションプロジェクトを作成します。Visual Web Developerを起動し、プロジェクトを新規作成し「Silverlightアプリケーション」を選択します。

2.MainPage.xaml.csに以下のコードを追加します。

        public MainPage()
        {
            string Uri svcUri = new Uri("http://localhost:12345/BijinTimerDataSvc.svc");
            context = new BijinServiceEntities(svcUri);

            var query = (from i in context.ImagePointer
                        where i.ServiceID == "1" && i.Time < Timer
                        orderby i.Time ascending
                        select i).ToList();

        }

ところが、このコードを実行するとNotSupportedExceptionが発生します。

image

Silverlightでは同期操作がサポートされていないので、非同期操作を行うためにBeginExecuteとEndExecuteメソッドを呼び出す必要があるようです。何人かのMSのエバンジェリストが「しるばーらいとはひどうき」と言っていことが身に染みて分かってきました。

3.先程のコードを以下のように書き換えます。

        private void btnStart_Click(object sender, RoutedEventArgs e)
        {

            private Uri svcUri = new Uri("http://localhost:12345/BijinTimerDataSvc.svc");
            context = new BijinServiceEntities(svcUri);

            var query = (DataServiceQuery<ImagePointer>)
                              from i in context.ImagePointer
                              where i.ServiceID == "1" && i.Time < Timer
                              orderby i.Time ascending
                              select i;

            query.BeginExecute(result =>
            {
                List<ImagePointer> Last10Image = query.EndExecute(result).Take(10).ToList();
            }, null);
            
        }

13行目からラムダ式で非同期操作のタメのBeginExecuteとEndExecuteメソッドを呼び出しています。イベントハンドラーを登録してメソッドを作成してもいいのですが、いちいちメソッドを作成するのも面倒なので。

最後に自分の愚痴ですが、なんでSilverlightはこんなにも基本は非同期操作なんでしょう。.NETの他のテクノロジー(WinForm, ASP.NET, WPF)は全て基本同期操作なのに。Silverlightに移行すると必ずここにはまると思うんですよね。非同期操作(‘A`)マンドクセ。Silverlightを触り始めて人が全員こういう意見だったら、バージョン6のころには同期操作を全面的にサポートするのかなぁ。

Written by david9142

2010年10月4日 @ 1:15 AM

カテゴリー: ASP.NET

Tagged with ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。