BLOB アクセス インターフェイス : ISPExternalBinaryProvider
外部バイナリ ラージ オブジェクト (BLOB) ストア (EBS プロバイダ) は、Windows SharePoint Services の SharePoint ストレージ アクセス スタックに COM コンポーネントとして統合されます。EBS プロバイダのコアを形成するのは、特定のインターフェイス ISPExternalBinaryProvider ですが、このインターフェイスを実装してユーザー設定のプロバイダを記述する必要があります。このインターフェイスには、StoreBinary と RetrieveBinary の 2 つのメソッドが用意されており、これらのメソッドを実装して、外部 BLOB ストアとのバイナリ データを保存および取得します。
インターフェイス定義 (IDL)
SharePoint アプリケーションでは、ISPExternalBinaryProvider クラスの一般的かつサーバー内部に状態が保持されないインスタンスを保持します。この永続的なインスタンスは、外部 BLOB ストアから BLOB データを保存または取得する際に呼び出されます。
インターフェイスの IDL ファイル (extstore.idl) の内容は、以下のようになります。
/*************************************************
File: extstore.idl
Copyright (c): 2006 Microsoft Corp.
*************************************************/
import "objidl.idl";
[
uuid(39082a0c-af6e-4ac2-b6f0-1a1ff6abbae1)
]
library SharePointBinaryStore
{
[
local,
object,
uuid(48036587-c8bc-4aa0-8694-5a7000b4ba4f),
helpstring("ISPExternalBinaryProvider interface")
]
interface ISPExternalBinaryProvider : IUnknown
{
HRESULT StoreBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] ILockBytes* pilb,
[out] unsigned long* pcbBinaryId,
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId,
[out,optional] VARIANT_BOOL* pfAccepted);
HRESULT RetrieveBinary(
[in] unsigned long cbPartitionId,
[in, size_is(cbPartitionId)] const byte* pbPartitionId,
[in] unsigned long cbBinaryId,
[in, size_is(cbBinaryId)] const byte* pbBinaryId,
[out] ILockBytes** ppilb);
}
}
StoreBinary メソッドのパラメータ
以下では、StoreBinary メソッドのパラメータについて説明します。
[in] unsigned long cbPartitionId
バイト配列のサイズが pbPartitionId パラメータに渡されます。Windows SharePoint Services では、常にこの値が 16 に設定され、そのサイズは GUID と同じサイズとなります。
[in, size_is(cbPartitionId)] const byte* pbPartitionId
バイナリ ファイルが存在するサイトの識別子です。EBS プロバイダは、これを使用して BlobId パラメータを外部 BLOB ストアの論理コレクションにマップすることができます。
[in] ILockBytes* pilb
ILockBytes インスタンスとしての BLOB データに対するポインタ
[out] unsigned long* pcbBinaryId
BLOB ID のバイト数。
[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId
BLOB が外部 BLOB ストアに格納された後に EBS プロバイダから受け取る出力パラメータ。EBS プロバイダでは、この ID を外部 BLOB ストアに送ることができます。またはこのストアは、EBS プロバイダを返すことができます。Windows SharePoint Services では、どの使用方法も指定しません。ただし、今後のバージョンの EBS プロバイダに適用可能な手法を選択することをお勧めします。
[out,optional] VARIANT_BOOL* pfAccepted
Boolean 型のパラメータです。FALSE は、BLOB ファイルがインラインに格納される必要があることを Windows SharePoint Services に示しています。Windows SharePoint Services で BLOB を拒否する EBS プロバイダをサポートできない場合 (特定のファイルがリンクの修復やウイルス スキャンのために更新される場合) などの一部の状況において、Windows SharePoint Services は、NULL ポインタを渡します。このポインタが渡される場合、EBS プロバイダは、ファイルを保存するか、失敗を示す HRESULT を返す必要があります。
RetrieveBinary メソッドのパラメータ
以下では、RetrieveBinary メソッドのパラメータについて説明します。パラメータ自体は、StoreBinary メソッドのものと同じになります。
[in] unsigned long cbPartitionId
バイト配列のサイズが pbPartitionId に渡されます。 Windows SharePoint Services では、常にこの値が 16 に設定され、そのサイズは GUID と同じサイズとなります。[in, size_is(cbPartitionId)] const byte* pbPartitionId
バイナリ ファイルが存在するサイトの識別子です。 EBS プロバイダは、これを使用して BLOB ID を外部 BLOB ストアの論理コレクションにマップすることができます。[in] unsigned long cbBinaryId
BLOB ID のバイト数。[in, size_is(cbBinaryId)] const byte* pbBinaryId
外部 BLOB ストア内の BLOB を検索するために EBS プロバイダに渡される識別子。[out] ILockBytes** ppilb
ILockBytes インスタンスとしての BLOB データに対するポインタ
StoreBinary 用の値を返す
以下は、ISPExternalBinaryProvider:StoreBinary メソッドを使用する場合の戻り値とその説明です。
S_OK |
メソッドは正常に実行されました。 Windows SharePoint Services で NULL 以外のアドレスを使用して *pfAccepted を渡す場合、*pfAccepted が VARIANT_FALSE であると、ファイルが SQL Server に保存されます。そうでない場合、Windows SharePoint Services は、ppbBinaryId にこの値を格納し、BLOB が外部に保存されたことを記録します。 |
E_FAIL |
Windows SharePoint Services は、ファイルが保存されなかったことをユーザーに通知し、いかなる出力パラメータも変更しません。(CoTaskMemAlloc が呼び出されると、EBS プロバイダは、CoTaskMemFree が呼び出されたものと判断します。) |
Windows SharePoint Services では、予期しない HRESULT の戻り値を記録し、HRESULT が成功しても失敗しても適切に処理します。
RetrieveBinary 用の値を返す
以下は、ISPExternalBinaryProvider:RetrieveBinary メソッドを使用する場合の戻り値とその説明です。
S_OK |
メソッドは正常に実行されました。 Windows SharePoint Services は、*ppilb パラメータからファイル内容を読み取り、その後そのファイルを解放します。 |
E_FAIL |
メソッドの実行が失敗しました。 Windows SharePoint Services は、ファイルを解放できなかったことをユーザーに通知します。 Windows SharePoint Services では、*ppilb パラメータの値を変更しません。 |
プロバイダは、ストレージ アクセス スタックに ILockBytes インターフェイスを返します。
StoreBinary メソッドと同様に、EBS プロバイダは、検索イベントの記録に関して責任を持っています。Windows SharePoint Services は、予期しない HRESULT の戻り値を記録しますが、そうでない場合は、戻り値が単に S_OK や E_FAIL であるかのように記録します。