.NET_3.5 Technical Briefing ソースコード説明 担当者の Demo 実施時の環境 注意 Visual Studio 2008β2 日本語版および Microsoft Silverlight Tools Alpha for Visual Studio 2008 Beta 2 Expression Blend 他 http://www.microsoft.com/silverlight/#4_1 http://www.microsoft.com/silverlight/#4_2 SQL Server 2005 Developer Edition (SP 含む ) VS に入っている Express Edition でも OK です Enterprise Edition 2005 180 日評価版でも OK です http://www.microsoft.com/japan/sql/downloads/trial-software.mspx データベースフゔル Northwind サンプルデータベースが必要です http://www.microsoft.com/downloads/details.aspx?familyid=06616212-0356-46a0-8da2-eebc53a68034&displaylang=en このソースは DinnerNow.NET の動きを簡易化したもので あくまでサンプルコードですので 全ての環境で完全に稼働することは保障できません 開発のためのご参考までに ご提供しますので ご了承お願いいたします
最初の手順 Visual Studio 2008 Beta2 及び Microsoft Silverlight Tools Alpha for Visual Studio 2008 Beta 2 がンストールされていることを確認してください Northwind データベースをダウンロードしてンストールし 接続できることを確認しておきます 接続の追加 SQL Server で追加しておきます ソリューション mywcfservice をダブルクリックしてオープンし WindowsForms プロジェクトにしておきます これをスタートゕッププロジェクトとして指定します もしダブルクリックした時に ~ agclient.csproj を開けません 等のエラーのダゕログが出た場合には そのまま OK を押して mywcfservice プロジェクトと WindowsForms プロジェクトにある Employees.dbml フゔルを 再度 作り直してください 作り直し方は それぞれのプロジェクトを右クリックして (1) まず最初に それぞれの Employees.dbml フゔルを削除します (2) 次に それぞれで 新しい項目の追加 を選択して LinqToSQL クラスを選んで 名前を Employees.dbml にして OK を押します (3) 最後に このデザンサーフェスに サーバーエクスプローラから Employee テーブルを ドラッグ & ドロップするだけです 出来上がったフゔルのコードビハンド ( Employees.designer.cs ) フゔルを開いて EmployeesDataContext オブジェクトが自動生成されていることを確認してください
デモ手順 1 Windows フォームからの LINQ の利用 1. WindowsForms プロジェクトに LINQ to SQL クラスを Employees という名前で追加します 2. 追加された Employees.dbml に Employees テーブルをドラッグします 3. button1_click ベントハンドラに以下の式を手動で記述します EmployeesDataContext dbs = new EmployeesDataContext(); var emps = from LinqEmpoyees in dbs.employees where LinqEmpoyees.City == textbox1.text select LinqEmpoyees; string resultstring = ""; foreach (var emp in emps) { } resultstring += "EmployeeID: " + emp.employeeid + " r nname: " + emp.firstname + " " + emp.lastname + " r naddress: + emp.city + emp.address + " r ntitle: " + emp.title + " r n r n"; textbox2.text = resultstring; 5. プロジェクトを実行し textbox1 に "London" と入力して [Click Me!!] ボタンをクリックします
デモ手順 2 WCF サービスの作成 あらかじめ作成済みですので コードの記述はありません 独自クラスを使用した LINQ のマッピングをご参照戴きます Service1.svc をブラウザで表示して WSDL を表示します
デモ手順 3 Windows フォームからの WCF サービスの呼び出し 1. 作成済み WCF サービスを [ サービスの参照の追加 ] で参照します 2. フォームにコマンドボタン (button2) を追加します 3. button2_click ベントハンドラに以下の式を手動で記述します ServiceReference.Service1Client ISrv = new ServiceReference.Service1Client(); ServiceReference.employeeInfo[] employees = ISrv.getEmployeeInfo(textBox2.Text); // ここから下は button1_click ベントハンドラからコピーして使用します //foreach 文の emp の型を変更することを忘れずに行ってください string result = ""; foreach (ServiceReference.employeeInfo emp in employees) { } result += "EmployeeID: " + emp.employeeid + " r nname: + emp.firstname + " " + emp.lastname + " r naddress: + emp.city + emp.address + " r ntitle: " + emp.title + " r n r n"; textbox2.text = result; 4. プロジェクトを実行し textbox1 に "London" と入力して [Click Me!!] ボタンをクリックします
デモ手順 4 WCF サービスのバンデゖングの変更 (SOAP JSON ) 1. mywcfservice プロジェクトの web.config を変更します SOAP のコメントをコメントゕウトします <!---SOAP--> JSON のコメントを解除し 同時に <endpointbehaviors>'jsonbehavior'" --> の位置をコメントゕウト コメント解除にします 2. Service1.svc をブラウザで表示します 3. JSON オブジェクトであることを確認するために ブラウザに表示された URL(Services1.svc) の後ろに /js をつけて再度ロードします 4. JS フゔルがダウンロードされるので メモ帳で内容を表示 JavaScript が使用するプロキシが記述されていることを確認します
デモ手順 5 ASP.NET AJAX ( ScriptManager ) からの WCF (JSON) サービスのコール 1. mywcfservice プロジェクトの Default.aspx をオープンします 2. ScriptManager のプロパテゖで Web 参照を追加します 3. Web サービスの呼び出し方のソースを参照してください コールバックルーチンを使用しています 成功時 失敗時の引数も一緒に記述されています JSON を使用しているため 返されたオブジェクトをそのまま使用できます 4. Default.aspx をブラウザで表示し テキストボックスに London と入力し [click me] ボタンをクリックします
デモ手順 6 Silverlight からの WCF (JSON) サービスのコール 1. プロジェクト agclient をオープンしてください WCF 呼び出し箇所のコードについて説明します 2. 現在公開されている Silverlight 1.1 Alpha Refresh では 1. 同じドメン内 (= 相対 URL ) において 2. JSON による Web サービスのみ 呼び出しが行えます このあたりは 2.0 では問題なくなります この資料の最後にある参考資料を参照してください 3. Silverlight 1.1 プロジェクトの実行 1.Silverlight プロジェクトをそのまま実行 (TestPage.html) すると ローカルパスからの実行となってしまい Web サービスをコールできません ブラウザ内の Silverlight に Web Service Call. と表示されますが これをクリックするとエラーになります URL もローカルを示しています 2. そこで Service1.svc をブラウザで表示し URL を以下のように書き換えます http://localhost:52562/agclient/testpage.html 3. ブラウザ内の Silverlight に "Web Service Call." と表示されるのでクリックします 4. 結果が返ることを確認します 右クリックすると Silverlight の Configuration が出て Silverlight で記述されていることがわかります
( 参考 ) Silverlight 2.0 について Silverlight 1.1 から Silverlight 2.0 への変更の理由 Silverlight の次期バージョン名は これまでゕナウンスしてきた Silverlight 1.1 に代わって Silverlight 2.0 に改められました これは 次期バージョンが実現しようとしている機能や能力が 1.1 というバージョン番号にはそぐわないほど強化されるため ユーザのニーズや期待感を高めるためにも Silverlight の方向性を再設定したことによるものです 参照 :Scott Guthrie の Blog http://weblogs.asp.net/scottgu/archive/2007/11/29/net-web-product-roadmap-asp-net-silverlight-iis7.aspx Silverlight 2.0 の新機能 以下 一部の搭載予定機能をピップゕップしてご紹介いたします ASP.NET で行っているような ツールボックスを追加する デザン設計をドラッグするといったコントロールが可能になります WPF UI フレームワーク :( 次ページ参照 ) 拡張可能なコントロールフレームワークモデル レゕウトマネージャー 双方向データバンデゖング コントロールテンプレートやスキニング ( コントロールの視覚的な要素を変更すること ) Silverlight にレゕウトマネージメントが内蔵されるため デザナも開発者も魅力的な UX を簡単に構築できます このレゕウトマネージメントでは リサズやリレゕウトも自動的に実行できます コントロール ( 次ページ参照 ) フォームコントロール ( テキストボックス チェックボックス ラジオボタンなど ) レゕウトコントロール (StackPanel や Grid など ) 汎用機能を提供するコントロール (TabControl Slider ScrollViewer ProgressBar など ) データ操作コントロール (DataGrid など ) その他色々 通信関連 REST POX RSS WS-* 通信のサポート クロスドメンネットワークゕクセス ソケット通信のサポートにより 開発者は REST や POX といった一般的な Web データ技術を使ったクラゕント / サーバー型ソリューションを構築できます Silverlight 2.0 には クロスドメンネットワークを実現するソリューションがンテグレーションされ 開発者は 信頼されている Web サトのデータソースへゕクセスできる様になります また メデゖゕ再生に関するサポートフォーマットやパフォーマンスの改善も行われました.NET 基本クラスライブラリのサポートコレクション IO ジェネリック スレッデゖング グローバラゼーション XML ローカルストレージなどの.NET 基本クラスラブラリ および LINQ to XML や よりリッチな HTML DOM API ンテグレーションのサポート DRM PlayReady Silverlight 2.0 は コンテンツへのゕクセスに関して デジタル著作権管理の仕組みである Microsoft PlayReady をサポートします これは Windows と Mac で使うことができます なお Silverlight2.0 のベータ版は 2008 年第一四半期に Go Live ラセンス ( プレビュー版で開発したゕプリに対して 稼働許諾を与えるラセンス ) 付きで提供が開始される予定です
( 参考 ) Silverlight 1.1 Alpha Refresh & 2.0 ( 暫定版 ) 1.1 Alpha 2.0 リリース版 ( 予定 ) コントロール Button サンプル TextBox TextBox(single line) TextBlock Scrollbar サンプル ScrollViewer Slider サンプル ListBox サンプル CheckBox RadioButton ComboBox TreeView RichTextBox DataGrid Hyper Link Modal PopUp / Alert PopUp Progress Bar FileOpenDialog 部分的 UserControl Image Media Element レゕウト Canvas Grid StackPanel ViewBox TabControl ItemsControl (a.k.a. Repeater) 部分的 MultiScaleImageElement その他 マウスベント 部分的 キーボードベント 部分的 データバンデゖング 3D ベクタグラフゖック GPU による高速化 オフラン利用 クロスプラットフォーム