次の方法で共有


IDeliveryProtocol.DeliverNotification Method

配信プロトコルをアクティブにします。配信プロトコルは、必要に応じて通知データをパッケージ化し、外部配信システムにルーティングします。

名前空間: Microsoft.SqlServer.NotificationServices
アセンブリ: Microsoft.SqlServer.NotificationServices (microsoft.sqlserver.notificationservices.dll 内)

構文

'宣言
Sub DeliverNotification ( _
    headersList As NotificationHeaders(), _
    body As String _
)
void DeliverNotification (
    NotificationHeaders[] headersList,
    string body
)
void DeliverNotification (
    array<NotificationHeaders^>^ headersList, 
    String^ body
)
void DeliverNotification (
    NotificationHeaders[] headersList, 
    String body
)
function DeliverNotification (
    headersList : NotificationHeaders[], 
    body : String
)

パラメータ

  • headersList
    通知メッセージを作成したり、外部の配信システムへメッセージをルーティングする場合に必要となる情報が格納されている NotificationHeaders オブジェクトの配列です。

    NotificationHeaders オブジェクトには、受信者に関する情報を提供する RecipientInfo オブジェクトである NotificationState オブジェクトと、アプリケーション定義に指定されたプロトコル フィールドの値を含む StringDictionary オブジェクトが含まれます。通知クラスでマルチキャスト配信が使用される場合を除き、各配列には NotificationHeaders オブジェクトが 1 つだけ含まれます。通知クラスでマルチキャスト配信を使用する場合には、通知受信者ごとに 1 つの NotificationHeaders オブジェクトが存在します。

  • body
    コンテンツ フォーマッタによって生成されたフォーマット済み通知データを含む文字列です。

解説

ディストリビュータはこのメソッドを使用して、コンテンツ フォーマッタによって作成され、body パラメータとして渡されたフォーマット済み通知データと、プロトコル定義から取得されたヘッダー情報を配信プロトコルに渡します。配信プロトコルは、必要に応じて通知メッセージを生成し、外部配信システムに送信します。

ディストリビュータは、配信される各メッセージに対して 1 回だけ配信プロトコルの DeliverNotification メソッドを呼び出します。マルチキャスト配信の場合、DeliverNotification メソッドの呼び出しごとに 1 つ以上の通知からのデータを含めることができます。配信プロトコルは、この情報から通知メッセージを作成し、そのメッセージを配信のためにルーティングします。開発者が使用可能で、宛先の配信システムで有効であれば、外部配信システムへのメッセージのルーティングの方法は、どのような方法でも使用できます。多くの場合、オペレーティング システムで提供されるトランスポート メカニズムが使用されています。

配信プロトコルは、通知状態コールバック (デリゲートが、nsc 引数で Initialize メソッドに渡されている) を使用し、DeliverNotification メソッドに NotificationHeaders オブジェクトとして渡される通知ごとに、NotificationStatus オブジェクトをディストリビュータに 渡す必要があります。NotificationStatus オブジェクトは、各通知配信の実行結果の詳細を提供します。各 NotificationStatus オブジェクトには、以下のフィールドが存在します。

  • NotificationState: 通知情報を配信プロトコルに伝達するために使用されるオブジェクトです。NotificationState オブジェクトは配信プロトコルに渡されます。その後、このオブジェクトは、NotificationStatus オブジェクト内の通知配信状態情報の一部として戻されます。NotificationState オブジェクトに格納されている情報は、配信プロトコル内では使用されません。

  • succeeded: 通知メッセージが正常に外部配信システムに渡されたかどうかを示すブール値です。

  • statusInfo: エラー メッセージや状態コードの説明テキストなどの追加の配信状態情報です。配信プロトコルで statusInfo の値が必要ない場合は、NULL 値にできます。

  • notificationText: 通知メッセージのコンテンツです。配信プロトコルで notificationText の値が必要ない場合は、NULL 値にできます。

  • timeStamp: 配信の実行時刻です。配信プロトコルで timeStamp の値が必要ない場合は、NULL 値にできます。この値を使用する場合、時刻は世界協定時 (UTC) の時刻で指定する必要があります。

DeliverNotification の 1 回の呼び出しで複数の通知が渡される場合 (つまり、headersList 配列に複数の NotificationHeaders オブジェクトが含まれる場合)、各通知のディストリビュータに NotificationStatus オブジェクトを指定する必要があります。この処理は、通知状態コールバックを複数回呼び出すか、1 回の呼び出しで複数の NotificationStatus オブジェクトを通知状態コールバックに渡すことで行います。

実装で通知状態コールバックをいつ起動するかについては、アプリケーション パフォーマンスの必要条件と、データ正確性の必要条件とのバランスを考慮して決定してください。

通知状態コールバックを呼び出すたびに、データベース サーバーへのラウンド トリップが発生します。1 回の呼び出しで複数の NotificationStatus オブジェクトを送信すると、サーバーへのラウンド トリップが減少し、パフォーマンスが向上します。この場合、十分な数の通知状態値が収集されるまで、個々の通知状態の値をメモリにキャッシュするようにプロトコルを実装する必要があります。この方法では、サーバーの障害時に通知が重複して送信されてしまう可能性があり、その場合、通知の状態がレポートされる前にインメモリ キャッシュが失われる原因になります。この問題は、通知が送信されたら即座に各通知の状態を個別にレポートすることで軽減できますが、その結果、ラウンド トリップの回数が増え、パフォーマンスに影響が出ます。

ms146834.note(ja-jp,SQL.90).gif重要 :
DeliverNotification が例外をスローした場合は、DeliverNotification の呼び出しで渡された通知ヘッダーに対して状態コールバックを起動しないでください。このメソッドでスローされた例外は、配信エラーとして扱われます。通知配信状態には、自動的に Failed が設定されるため、コールバックを使用して状態を設定する必要はありません。

配信プロトコル定義の詳細については、「配信プロトコルの構成」を参照してください。

同じ配信チャネルに送信される 1 つのバッチ内の通知はすべて、1 つのスレッドで処理されます。ディストリビュータでは、このような多数のスレッドが並列実行して、異なるバッチまたは複数の配信チャネルに送信される通知が含まれた 1 つのバッチを処理している場合があります。これらのスレッドの数はシステムによって制御されますが、ディストリビュータの ThreadPoolSize 設定でスレッド数の上限を設定できます。

DeliverNotification メソッドを実装するときには、同期的 (配信が完了した場合にのみ返される) または非同期的な配信を実装するように選択できます。バッチが完了すると、ディストリビュータはプロトコルの Flush メソッドを呼び出して、メソッドが返されるのを待機します。Flush が返された時点で、未処理の配信をすべて完了または中止し、通知ステータスのコールバックを介して状態を報告する必要があります。

使用例

DeliverNotification メソッドを実装する方法の例については、IDeliveryProtocol インターフェイスのトピックを参照してください。

スレッド セーフ

この型の public static (Microsoft Visual Basic では共有 ) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。

プラットフォーム

開発プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

対象プラットフォーム

サポートされているプラットフォームの一覧については、「SQL Server 2005 のインストールに必要なハードウェアおよびソフトウェア」を参照してください。

参照

関連項目

IDeliveryProtocol Interface
IDeliveryProtocol Members
Microsoft.SqlServer.NotificationServices Namespace