Click Here!サカスタ 掲示板お問い合わせランダムジャンプ

Top Index
Yahooは検索方式が変わったせいか、うまくサイト内検索できないなぁ。つーわけでグーグルに変更。


2009年01月11日
Windowsフォーム開発者向け、Silverlight2アプリ開発メモ
Silverlight2公式HP

2008年11月頃に正式リリースされたSilverlight2(端的にいうとMicrosoft版Flash。開発言語にVB.NET、C#が利用できる。)で、ビジネスアプリケーションが生成できるのかを調べてましたので、メモ書きとして残しておきます。

なお、今回は概念的な話を中心としていますので、コードは掲載していません。
1.開発環境

Visual Studio 2008(有料)の場合、サービスパックを当てないと開発できませんので、マイクロソフトのサイトからパッチを導入してください。
なお、バッチの導入順序は、「SP1→P1 用 Microsoft Silverlight Tools」の順になります。

    Microsoft Visual Studio 2008 Service Pack 1 (インストーラ)

    Visual Studio 2008 SP1 用 Microsoft Silverlight Tools

また、Silverlight2のデザイナ向け開発ツール Expression Blend2 も持っている場合は、こちらも開発用のサービスパックがあるので、導入しておきましょう。

    Microsoft Expression Blend 2 Service Pack 1

※無料の開発環境として、「Microsoft Visual Studio 2008 Express Edition SP1」があります。こちらの環境でも、ほぼ同様のことができると思いますが、後述するWCFサービスアプリケーションが開発できるかどうかは確認しておりません。

※後述でもでてきますが、VisualStudioではSilverlightアプリケーションのインターフェイスをGUIを用いて開発できません。GUIを用いて開発するには、Expression Blend2 という別売りのソフトを導入する必要があります。
本ソフトはデザイナ向けのツールであるため、なくても開発は可能です。
そのため、開発のみであれば、Visual Studio 2008 Standard Edition 単体を、デザイン開発環境までそろえるなら、Visual Studio 2008 Standard Edition と Expression Blend2 がセットになった Microsoft Expression Studio 2 を購入するとよいでしょう。


2.開発時の障壁

2-1.Silverlight2アプリケーション

「1」の環境を構築できたら、VisualStudioの「新しいプロジェクト」画面にSilverlightが追加されています。
「Silverlightアプリケーション」を選択して開発を進めたいのですが、「Silverlightアプリケーションの追加」というウィザード画面が起動してしまい、面食らいます。
このあたりの詳細は

    Silverlight International Learn(日本語)

にチュートリアルが掲載されていますので、一読されることをお勧めします。(チュートリアルの0〜5ぐらいまでは抑えておいたほうがいいでしょう。なお、チュートリアル0は目次みたいなものですので、さらっと読んでおけばよいでしょう。)


2-2.XAML

VisualStudioでは、SilverlightのインターフェイスをGUIを用いて記述できず、従来のWindowsアプリケーションのような開発はできません。
そのため、Silverlightのインターフェイス用の言語であるXAMLを覚える必要があり、結構大変です。
主要なタグ(グリッド、テキストボックス、ボタンなど)の構文については「2-1」に掲載したサイトのチュートリアルにありますので、そちらを参照してください。


2-3.Silverlight2における特有の技法

SiverlightはWebブラウザ上で動作するため、Windowsフォームと比べると様々な制約があります。
代表的なものを挙げます

  ・画面遷移、ダイアログ処理が特殊
    そもそもウインドウを新規に生成することはできないので、
    「現在の画面の中身を入れ替える」
    (http://silverlight.net/learn/learnvideo.aspx?video=56933
    などの独特の実装をしなくてはならない。
    ※メッセージボックスのみ従来のような構文で実装可能。
    
  ・DB処理を書けない
    Silverlightアプリケーション上からはデータベースに関する処理は書けません。
    そのため、WCFサービスというIIS上で動作するWebAPIを開発する必要があります。
    ※後述しますが、WCFサービスはVisiaulStudio上で開発可能です。
    ※MSの技術に固執しない場合、WCF以外の選択肢があります。(未確認)
    
  ・非同期処理が多い
    Windowsフォームにおいてはあまり非同期処理はないのですが、
    SilverlightでWebAPIを呼ぶと基本的に非同期になるので、
    非同期を考慮したUI制御が必要になります。
    例:検索処理を例に挙げますと、
      Windowsアプリケーションでは「検索ボタンクリック時イベント」に
        検索処理を実行する
        検索結果を画面表示する
      と記述するところですが、
      Silverlight側の処理は、「検索ボタンクリック時イベント」には
        検索処理を依頼する。
      だけを記述し、それとは別に「検索終了イベント」が発生したら、
        結果を画面に表示する
      となる。
      この「検索ボタンクリック時イベント」から「検索終了イベント」の間、
       ユーザーはアプリケーションの操作が可能で、再度クリックボタンを
      押下することもできる。
    
  ・WCFサービス、またはグリッドが貧弱?
    ここでいう、グリッドとはGridではなくDataGridのことを指します。
    (SilverlightでいうところのGridは、レイアウト用のコントロールで、
    (DataGridというのがExcelのような表組みのコントロールです。
    何が貧弱かというと、
      「DataTableクラス(2次元配列)を表示できない」
    というところです。
    WindowsフォームでいうところのDataGridViewにDataTableクラスを突っ込むと、
    ヘッダーの表示から、データの表示までが行われますが、
    DataGridではそれができない模様です。
    そもそも、WCFサービスを用いてDataTableクラスを返せないので、この問題が
    DataGridにあるのか、WCFサービスにあるのかはわかりませんが・・・。
    検索結果など、単なる読み取り情報までエンティティ定義を
    しないといけないのは、さすがに面倒。


2-4.WCFサービス(WebAPI)

DB処理はSilverlight上で実装できませんので、別途WCFサービスという汎用的なWebAPIプロジェクトを用意する必要がありますが、これ自体はそれほど難しくありません。
主の処理としてはSilverlight向けにモデル(エンティティ)を公開する場合、
  クラスにはDataContract属性をつける
  プロパティにはDataMember属性を付ける
  WebAPIにはOperationContract属性を付ける
ぐらいしか覚える必要がありません。

※実際にはもっと覚えることはありますが、VisualStudioが自動処理してくれるため、あまり意識する必要がありません。

デバッグも特に意識しなくても、従来の感覚で行えます。
問題は本番環境へのリリース時です。

というのも、サーバーを通してDBにアクセスすることを許可しているため、セキュリティを考慮する必要が出てきます。
私自身、サーバーセキュリティの知識はあまりないので詳しく説明できませんが、少なくとも以下のことを行わないと、そもそも動きません。

  ・Silverlightポリシーファイルの設置
    Siverlightを経由してWCFサービスを利用する場合、
    WCFサービスを提供するサーバー側に、利用を認めるかどうかを
    判断するファイルが必要になります。
    同ファイルの設置場所は、ルートフォルダ(例 C:\Inetpub\wwwroot)です。
    
    参考:MSDN ネットワーク セキュリティのアクセス制限 (Silverlight 2)     
  
  ・DBへのアクセス権限
    DBの認証方式をWindows認証にしている場合、
    WCFサービスを利用してくるユーザーは「ASPNET」というユーザー名であるため、
    同ユーザーがDBにどこまでアクセスできるのかを設定する必要があります。
  
  ・サーバーへの書き込み権限
    ログファイルやテンポラリファイルなどをサーバー上に残す場合、
    「ASPNET」ユーザーが作業フォルダに対して適切な権限(例:編集権限)を
    与える必要があります。


以上になります。

最後に、私がマスタメンテをSilverlight2で作成してみた感想をつらつらと書いてみます。

・ビジネスアプリケーションを作成することは可能だろう。

・Silverlightのビジネスロジック部分は、UI制御で相当汚くなるだろう。
 Windowsフォームの、BindingSourceクラス、BindingNavigatorクラスの
 ようなものが出てくると大分変わると思います。
 ちなみに、入力制御をモデル側でなく、UI側で実装した場合、バグは出やすい。

・Windowsアプリケーションに比べ、
   ・アプリケーション配布負荷の軽減(インストール、DBドライバ・設定)
   ・ログ回収コードの軽減(サーバ上に直保存できるため、回収処理が不要)
   ・WCFサービスによるシステム間連携の軽減
   ・デザイナとの協業が楽
   ・一般(外部)公開への展開が見込める
 あたりがメリットで、
 逆に、
   ・UI制御コードが増加する可能性あり
   ・新規技術学習コスト(XAML、WCFサービス)
   ・サーバー導入コスト(IISサーバが必要になる可能性あり)
   ・セキュリティ対策(サーバー設定知識が必要)
 あたりがデメリット。

・純粋なWindowsアプリケーション開発者は、
  「XAML」、「WCFサービス
 を勉強してみるとよい。

・Silverlight2自体はApacheなどの非MSサーバで操作すると思うが、
 WCFサービスはIIS以外では動作しないであろうから、MSサーバーは必要。
 ※WCFサービスを用いないのであれば話は別

・WCFサービスが構築できると、システム間連携の大きな転換期を迎えられそうだ。

・(個人的な課題)
 WCFサービスがマルチスレッドなのかどうかがイマイチわからない。
 特別な記述は一切していないが、デュアルコアのPC上で動作させると、
 2処理までは平行して走る。
 ただし、変数を共有しているようにも見えない。
 このあたりはまだまだ調査不足です。
[ 投稿者:mk3008 at 15:20 | Silverlight | コメント(0) | トラックバック(0) ]

この記事へのコメント

この記事へのトラックバック

この記事へのトラックバックURL
http://shinshu.fm/MHz/88.44/a12153/0000267355.trackback

この記事の固定URL
http://shinshu.fm/MHz/88.44/archives/0000267355.html

記事へのコメント
 
認証コード:
画像に表示されるコードを半角英数字で入力して下さい。画像が読み難い場合はこちら
簡単演算認証: 7 + 2 =
足し算の答えを半角英数字で入力して下さい。
名前: [必須]
URL/Email:
タイトル:
コメント: