Share via


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