BLOB アクセス インターフェイス : ISPExternalBinaryProvider

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

この記事の内容
インターフェイス定義 (IDL)
StoreBinary メソッドのパラメーター
RetrieveBinary メソッドのパラメーター

外部バイナリ ラージ オブジェクト (BLOB) ストア (EBS プロバイダー) は、Microsoft SharePoint Foundation 2010 の 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 パラメーターに渡されます。SharePoint Foundation では、常にこの値が 16 に設定され、そのサイズは GUID と同じサイズとなります。

[in, size_is(cbPartitionId)] const byte* pbPartitionId

バイナリ ファイルが存在するサイトの識別子です。EBS プロバイダーは、これを使用して BlobId パラメーターを外部 BLOB ストアの論理コレクションにマップすることができます。

[in] ILockBytes* pilb

ILockBytes インスタンスとしての BLOB データへのポインター Important: プロバイダーは HRESULT を返した後、ILockBytes* オブジェクトへの参照を保持してはなりません。

[out] unsigned long* pcbBinaryId

BLOB ID のバイト数。

[out, size_is(, *pcbBinaryId)] byte** ppbBinaryId

BLOB が外部 BLOB ストアに格納された後に EBS プロバイダーから出力されるパラメーター。EBS プロバイダーがこの ID を外部 BLOB ストアに与えることも、ストアが EBS プロバイダーを返すこともできます。SharePoint Foundation では、どちらの方法を使用するかを指定していません。ただし、今後のバージョンの EBS プロバイダーに適用できる方法を選択することをお勧めします。

このパラメーターは、CoTaskMemAlloc を使用して割り当てる必要があります。

[out,optional] VARIANT_BOOL* pfAccepted

ブール値パラメーターです。FALSE は、BLOB ファイルがインラインに格納される必要があることを SharePoint Foundation に示しています。SharePoint Foundation で BLOB を拒否する EBS プロバイダーをサポートできない場合 (特定のファイルがリンクの修復やウイルス スキャンのために更新される場合) などの一部の状況において、SharePoint Foundation は、NULL ポインターを渡します。このポインターが渡された場合、EBS プロバイダーは、ファイルを保存するか、失敗を示す HRESULT を返す必要があります。

RetrieveBinary メソッドのパラメーター

以下では、RetrieveBinary メソッドのパラメーターについて説明します。パラメーター自体は、StoreBinary メソッドのものと同じになります。

  • [in] unsigned long cbPartitionId
    バイト配列のサイズが pbPartitionId に渡されます。SharePoint Foundation では、常にこの値が 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

メソッドは正常に実行されました。

SharePoint Foundation で NULL 以外のアドレスを使用して *pfAccepted を渡した場合、*pfAccepted が VARIANT_FALSE であれば、ファイルは SQL Server に保存されます。そうでなければ、SharePoint Foundation は、ppbBinaryId にこの値を格納し、BLOB が外部に保存されたことを記録します。

E_FAIL

SharePoint Foundation は、ファイルが保存されなかったことをユーザーに通知します。また、SharePoint Foundation はいかなる出力パラメーターも変更しません (CoTaskMemAlloc が呼び出されると、EBS プロバイダーは、CoTaskMemFree が呼び出されたものと判断します)。

SharePoint Foundation では、予期しない HRESULT の戻り値を記録し、HRESULT が成功しても失敗しても適切に処理します。

RetrieveBinary 用の値を返す

以下は、ISPExternalBinaryProvider:RetrieveBinary メソッドを使用する場合の戻り値とその説明です。

S_OK

メソッドは正常に実行されました。

SharePoint Foundation は、*ppilb パラメーターからファイルの内容を読み取り、その後そのファイルを解放します。

E_FAIL

メソッドの実行が失敗しました。

SharePoint Foundation は、ファイルを取得できなかったことをユーザーに通知します。SharePoint Foundation では、*ppilb パラメーターの値を変更しません。

プロバイダーは、ストレージ アクセス スタックに ILockBytes インターフェイスを返します。

StoreBinary メソッドと同様に、EBS プロバイダーは、検索イベントの記録に関して責任を持っています。Windows SharePoint Services は、予期しない HRESULT の戻り値を記録しますが、そうでない場合は、戻り値が単に S_OK や E_FAIL であるかのように記録します。

関連項目

概念

SharePoint Foundation でのバイナリ ラージ オブジェクト (BLOB) の外部保存