WS_SERVICE_CLOSE_CHANNEL_CALLBACK
コールバックシグネチャ
HRESULT WS_SERVICE_CLOSE_CHANNEL_CALLBACK(
WS_OPERATION_CONTEXT* context,
WS_ASYNC_CONTEXT* asyncContext
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| context | WS_OPERATION_CONTEXT* | 操作コンテキストです。 |
| asyncContext | WS_ASYNC_CONTEXT* | 関数が非同期に呼び出されているかどうかを示す情報です。 |
公式ドキュメント
エンドポイント上でチャネルが閉じられたとき、または中止されたときに呼び出されます。 このコールバックは、チャネルを閉じる直前に呼び出されます。
サービスホストが稼働しており、クライアントがチャネルを正常に閉じた通常の動作では、 これはクライアントからセッションの終了を受信し、これからチャネルを閉じようとしていることを意味します。
もう 1 つのシナリオは、サービスホストが中止シャットダウン (Abort Shutdown) を実行している場合や、 メッセージの処理中に回復不能なエラー状態が発生した場合です。その結果として、チャネルの中止と クローズが試みられます。この場合も、中止の直前にこのコールバックが呼び出されます。
セッションベースのサービスコントラクトでは、この通知はセッションの破棄を表します。 したがって、セッションをスコープとするアプリケーションの状態は、このコールバック内で破棄できます。
戻り値
このコールバック関数は値を返しません。
解説(Remarks)
返される HRESULT は、関数が非同期に完了するかどうかを判断するためだけに使用されます。失敗した場合や HRESULT で失敗を報告した場合でも、サービスホストの基盤には一切影響しません。
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK が正常に完了したかどうかにかかわらず、この関数は 常に呼び出されます。
チャネルが受け入れられたときに呼び出され、アプリケーションが状態を関連付けるために使用できる WS_SERVICE_ACCEPT_CHANNEL_CALLBACK も参照してください。
セッション状態の関連付けを解除するためにこのコールバックを使用する実装例については、セッションベースの電卓のサンプルを参照してください。
このコールバックはキャンセル可能です。
例
HRESULT CALLBACK FreeSessionCalculator (const WS_OPERATION_CONTEXT* context,
const WS_ASYNC_CONTEXT* asyncContext)
{
HRESULT hr = NOERROR;
SessionfulCalculator* calculator = NULL;
hr = WsGetOperationContextProperty (context,
WS_OPERATION_CONTEXT_PROPERTY_CHANNEL_USER_STATE,
&calculator, sizeof (SessionfulCalculator*), NULL);
if (SUCCEEDED(hr) && (calculator != NULL))
{
delete calculator;
}
return NOERROR;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)