WS_SERVICE_CLOSE_CHANNEL_CALLBACK回调函数 (webservices.h)

在终结点上关闭或中止通道时调用。 在我们即将关闭通道之前,将立即调用此回调。

当服务主机正在运行且客户端完全关闭通道时,对于正常操作,这意味着我们已收到来自客户端的会话关闭,并且即将关闭通道。

另一种情况是,当服务主机经历中止关闭或在处理消息期间满足不可恢复的错误条件时,我们尝试中止并关闭通道。 在这种情况下,在中止之前,我们将调用此回调。

对于基于会话的服务协定,此通知表示会话拆解。 因此,可以在此回调中销毁会话范围的应用程序状态。

语法

WS_SERVICE_CLOSE_CHANNEL_CALLBACK WsServiceCloseChannelCallback;

HRESULT WsServiceCloseChannelCallback(
  [in]           const WS_OPERATION_CONTEXT *context,
  [in, optional] const WS_ASYNC_CONTEXT *asyncContext
)
{...}

参数

[in] context

操作上下文。

[in, optional] asyncContext

有关函数是否正在异步调用的信息。

返回值

此回调函数不返回值。

注解

返回的 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;
}

要求

要求
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 webservices.h