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 であるかのように記録します。

See Also

概念

Windows SharePoint Services でバイナリ ラージ オブジェクト (BLOB) を外部保存する