マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

XBAPはwwwブラウザ上で動作するWPFアプリケーションで、
ClickOnceによる配布・自動更新機能が付属する。
(しかし、昨今、モダンブラウザに対応していない。)

  • XBAP」は、.NET Frameworkにより提供されるClickOnce技術を併用、HTTP / HTTPSプロトコルによるデプロイと自動更新が可能である。
  • ClickOnce と基本的には同じであるが、wwwブラウザ上で動作するため、より強い「セキュリティ制限」を受ける(サンドボックス化される)。
  • 具体的には、AdministratorsとPower Usersグループのトークンが除外されたプロセスで実行されるため、
    『完全信頼』であってもクライアント側コンピュータ上でのリソース アクセスには制限がある。
    • これはインターネット環境から不特定多数に向けて配信可能で、
      wwwブラウザ上で動作する性質上、ClickOnceと比べ、よりRIA 的な素質・資質が大きいためと考える。
  • また、IEにホストされるため、カレント ディレクトリは「%windir%\System32」となる。
    • このため、コンフィギュレーション、業務データの保存先として環境変数「USERPROFILE」以下のフォルダを使用するためには、
      環境変数を使用した絶対パスで指すことができるようなプログラム部品が必要になる。

セキュリティ

  • 「XBAP」アプリケーションは、通常「インターネット ゾーン アクセス許可セット」に制限された「サンド ボックス」
    と呼ばれる「部分信頼」のセキュリティ境界内で動作するため、通常の.NETアプリケーションと比べ制限がある。
  • 制限無しで動作させるには、「完全信頼」を使用する。
    • 「完全信頼」は、プロジェクトのプロパティから設定可能である。
    • なお、「完全信頼」の「XBAP」を配置する場合、
      セキュリティ ゾーンによって、それぞれ異なる施策が必要になる。
    • 以下の表に、セキュリティ ゾーン毎の施策を纏める。
項番セキュリティ ゾーン動作完全信頼を受け取るための操作
ローカル コンピュータ完全信頼として動作する
イントラネットおよび信頼されたサイト完全信頼のプロンプトを表示プロンプトに出所が表示されるように、証明書を使用してコード サイニングを行う。
インターネット サイトTTP(CA) から発行された証明書があれば、完全信頼として動作する。TTP(CA)の証明書を使用してコード サイニングを行う。
  • 故に、「完全信頼」で動作させるには、基本的に、
    証明書によるコード サイニングが必要になる。

注意事項

セキュリティ

「部分信頼」では実現できない機能が多い

ランタイム

WPFをサポートする実行環境に加え「XBAP」をホスト可能なwwwブラウザが必要。

デプロイ

  • .NET Frameworkのランタイムなどについては、必須コンポーネントに含める
  • クライアントへのインストールが不要なものであれば、参照設定のローカルコピーをtrueに設定。

複数画面表示

  • 別ウィンドウやモーダル ダイアログとしてWindowの起動ができない(ただしWin32ダイアログについては起動可能)。
  • モーダル ダイアログに相当する代替表現として、「ユーザ コントロール」を、ルートのパネル要素に追加(Children.Add)する方法がある。

リソース アクセス

完全信頼であってもクライアントPC上でのリソース アクセスには制限があるので注意する
(AdministratorsとPower Usersグループのトークンが除外されたプロセスで実行される)。

F5ボタンの抑止

[F5]ボタンを押下すると、当該画面の再初期化(コンストラクタや、Page_Loadedイベントの実行)が発生する。
これは、以下のようなコードで抑止できるが、WWWブラウザのアドレスバーにフォーカスをあてた状態でF5を押下した場合など、完全な抑止ができない。

<Page x:Class="WpfBrowserApplication1.Page1"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Page1" KeyDown="Page_KeyDown">

private void Page_KeyDown(object sender, KeyEventArgs e) {
  if (e.Key == Key.F5) e.Handled = true;
}

NavigationWindow? / Page

  • NavigationWindow? / Pageは、画面遷移の履歴を保持し、WWWブラウザの[進む]・[戻る]ボタンから、[進む]・[戻る]操作が可能となっている。
    • こちらも(上記、「F5ボタンの抑止」と同様に)、[進む]・[戻る]時に、
      当該画面の再初期化(コンストラクタや、Page_Loadedイベントの実行)が発生する。
    • また、このため、バック サブミットのような操作が行われ得るので、必要に応じてこの[進む]・[戻る]操作を抑止する必要がある。
  • IE6 / Firefoxでは、Page.ShowsNavigationUIプロパティをfalseに設定することで
    [進む]・[戻る]ボタンを非表示にできるが、IE7以降では、falseに設定しても非表示にはならない。
    • このため、画面遷移時のFrame.Navigatedイベントなどで、画面遷移の履歴を削除するか、
    • 運用(責任の所在をユーザのオペレーションに委任すること)で回避するようにする。

アセンブリ キャッシュ

  • アセンブリの取得・更新のたび、各バージョンのアセンブリがダウンロードされるため、
    各バージョンのアセンブリがダウンロード キャッシュ(C:\WINDOWS\assembly\Download)に溜まる。
  • ディスク容量に問題がある場合は、クライアント側で、
    gacutil /cdlコマンドを実行して、ダウンロード キャッシュをクリアする。

参考


Tags: :.NET開発, :UIサブシステム, :WPF/Silverlight, XAML


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-07 (月) 17:22:44 (2447d)