Web アプリケーションへの Silverlight 要求のライフサイクル

最終更新日: 2010年4月7日

適用対象: SharePoint Foundation 2010

この記事の内容
例のシナリオ
イベントのシーケンス
要求のライフサイクルを示す図

ここでは、Silverlight アプリケーション (SharePoint Foundation Web アプリケーションとは異なるドメインに配置されているが、Web パーツ内の SharePoint Foundation ユーザーに公開されている) が Web アプリケーションからデータにアクセスするときに発生する主なイベントとアクションの概要について説明します。Silverlight アプリケーションは外部アプリケーションなので、ここでは、Silverlight クロスドメイン データ アクセスの動作例についても説明します。

例のシナリオ

SharePoint Foundation への Silverlight 要求のライフサイクルを次の具体例の観点から説明します。

SharePoint Foundation サーバー ファームは //www.contoso.com/Internal/Sites/ に配置されています。このサーバー ファーム内の /Personnel/default.aspx は人事部門のホーム ページです。このページには Silverlight Web パーツ (SilverlightWebPart) が含まれます。Web アプリケーションが含まれる Web サービスでは、外部アプリケーション プロバイダー (EAP) が無効にされています。これにより、Silverlight Web パーツを 外部アプリケーション XML に登録できます。特に、この XML では、Silverlight アプリケーションがファイル https://www.microsoft.com/ja/jp/default.aspx であると指定されています。つまり、この Silverlight アプリケーションは SharePoint Foundation Web アプリケーションとは異なるドメインに配置されていることを意味します。ユーザーは、Silverlight アプリケーションを使用して、Web アプリケーションに含まれる Web サイト上の SharePoint Foundation リストから従業員情報の参照と表示ができます。Silverlight アプリケーション内のコードで、SharePoint Foundation データのクエリを実行します。これを行うには、マネージ クライアント オブジェクト モデル の特別な Silverlight バージョンを呼び出します (「Silverlight オブジェクト モデルを使用する」も参照)。

.xap ファイルが配置されているサーバーは、クエリの対象データを含む Web アプリケーションのドメインの外部にあります。したがって、通常、このシナリオでは、外部の Fabrikam サーバーに、Contoso SharePoint Foundation サーバーに対するフル アクセスを付与する必要があります。ただし、Silverlight クロスドメイン データ アクセス (Silverlight CDA) を使用すると、この呼び出しを、SharePoint Foundation サーバー オブジェクト モデルへのアクセス許可制限された呼び出しに変換できます。

イベントのシーケンス

以下に、Web パーツのライフ サイクルにおける主なイベントと Silverlight のデータ要求を示します。

  1. ユーザーが //www.contoso.com/Internal/Sites/Personnel/default.aspx に移動すると、ブラウザー内でページが開かれます。

  2. Silverlight Web パーツが読み込まれます。Silverlight Web パーツは、その ApplicationXml プロパティを読み取って Silverlight アプリケーションの URL を検索し、https://www.microsoft.com/ja/jp/default.aspx への要求を行います。これは、ユーザーのコンピューターから www.fabrikam.com サーバーへの直接的な要求です。この要求は、SharePoint Foundation フロントエンド Web サーバーを経由しません。

  3. External Application XML からの特定の情報が Web パーツから Silverlight アプリケーションに渡されます。最も重要な情報項目は次のとおりです。

    • アプリケーション プリンシパルのユーザー名。SharePoint Foundation Web アプリケーション内のアプリケーション プリンシパルは、SPUser オブジェクトです。このオブジェクトには、アプリケーション プリンシパルが実際の人物ではなくアプリケーションを表すことができるように設定された特定のプロパティがあります。他のユーザーと同様に、アプリケーション プリンシパルにも一連のアクセス許可が付与されています。Silverlight アプリケーションで可能な処理は、データにアクセスすること、およびページに移動した実際のユーザーとアプリケーション プリンシパルの両方のアクセス許可内にあるアクションを実行することのみです。アプリケーション プリンシパルの詳細については、「[方法] アプリケーション プリンシパル ユーザーを作成する」を参照してください。

    • 要求フォワーダー と呼ばれる、特殊な HTTP 要求ハンドラーの URL (www.fabrikam.com ドメイン上にある)。この特殊なハンドラーの作成方法の詳細については、「[方法] 外部アプリケーション用の HTTP 要求フォワーダーを作成する」を参照してください。

    • 要求トークン。Silverlight アプリケーションは、このトークンのコピーを SharePoint Foundation Web アプリケーションへのすべての要求に含めます。このトークンには、Web パーツが含まれるページに移動した実際のユーザーの ID などの情報が含まれます。これにより、Web アプリケーションは、アプリケーションに許可する必要のある効果的なアクセス許可を確認できます。改ざん防止のために、このトークンには、Web パーツの CreateChildControls メソッドの実行時に作成されるサーバー ハッシュ値が含まれます。このハッシュは 2 つの入力から作成されます。1 つはトークンのプレフィックスです。これには、ハッシュ値の前のトークン内のすべてが含まれます。もう 1 つは秘密の内部的なバイト配列です。これは、ハッシュ アルゴリズムの "ソルト" として使用されます。ソルトは、Web サービスを表す SPWebService オブジェクトが最初に作成されたときに作成され、このオブジェクトが更新されるたびに再作成されます。

      注意

      Silverlight アプリケーションが存在するサーバーでも、SharePoint Foundation Web アプリケーションから受信した結果が改ざんされていないことを確認する必要がある場合、クライアント ハッシュを、受け渡しが行われる要求トークンに含めることもできます。詳細については、「[方法] カスタム外部アプリケーション プロバイダーを作成する」を参照してください。

  4. Silverlight アプリケーションが読み込まれ、その Startup イベント ハンドラーが Init(IDictionary<String, String>) を呼び出し、以下の初期化情報を渡します。

    • 要求フォワーダーの URL。

    • 要求トークン。これは、Silverlight アプリケーションによって作成される各要求のヘッダーに追加されます。

  5. SharePoint Foundation データの要求を開始する Silverlight UI 内でユーザーがアクションを実行すると、Silverlight アプリケーション内のクエリ構築コードが、マネージ クライアント オブジェクト モデルの特別な Silverlight バージョンを呼び出します。このコードは特別な Silverlight クライアント アセンブリ (Microsoft.SharePoint.Client.Silverlight.dll および Microsoft.SharePoint.Client.Silverlight.Runtime.dll) を参照する必要があります。Silverlight クライアント オブジェクト モデルの詳細については、「Silverlight オブジェクト モデルを使用する」と「Silverlight 展開」を参照してください。

  6. クエリ コードの最後に ExecuteQuery() メソッドの呼び出しがあります。通常、このメソッドはクエリを SharePoint Foundation フロントエンド Web サーバーに渡しますが、Silverlight では、クロス ドメインの直接的な要求が作成されません。Silverlight アプリケーションは起動時に要求フォワーダーの URL を使用して初期化されているため、Silverlight アプリケーションはクエリを SharePoint Foundation Web アプリケーションの URL と共に要求フォワーダーに送信します。

  7. 次に、要求フォワーダーは、クエリをサーバー コードとしてフロントエンド Web サーバーに送信し、同時に、アプリケーション プリンシパルのユーザー資格情報と要求トークン (サーバー ハッシュを含む) も送信します。

  8. SharePoint Foundation フロントエンド Web サーバーは、サーバー ハッシュを検証し、さらに、アプリケーション プリンシパルと、Web パーツ ページに移動した実際のユーザーに、クエリ コードに書かれたすべての処理を実行するためのアクセス許可があることを検証します。

  9. サーバー ハッシュとアクセス許可が検証されると、フロントエンド Web サーバーはコードを実行し、データを Silverlight アプリケーションに返します。

要求のライフサイクルを示す図

図 1 は、Silverlight アプリケーションからの要求のライフサイクルの主なイベントを示しています。

図 1: Silverlight 要求のライフサイクル

イベントの Silverlight 要求ライフ サイクル チェーン