停止伺服器應用程式

伺服器應用程式可以藉由呼叫 RpcMgmtStopServerListeningRpcServerUnregisterIf,或直接結束主機進程,來停止接聽用戶端。 這兩種方法都是可接受的。 如果伺服器遵循第一種方法,它應該實作下列步驟:

伺服器函式 RpcServerListen 不會在發生例外狀況或 呼叫 RpcMgmtStopServerListening 之前傳回呼叫程式。 根據預設,只有另一個伺服器執行緒可以使用 RpcMgmtStopServerListening來停止 RPC 伺服器。 嘗試停止伺服器的用戶端會收到錯誤RPC_S_ACCESS_DENIED。 不過,您可以設定 RPC 以允許部分或所有用戶端停止伺服器。 如需詳細資訊,請參閱 RpcMgmtStopServerListening

您也可以讓用戶端應用程式對伺服器上的關機常式進行遠端程序呼叫。 關機常式會呼叫 RpcMgmtStopServerListeningRpcServerUnregisterIf。 本教學課程範例程式應用程式會藉由將新的遠端函式 Shutdown新增至 Hellop.c 檔案,以使用此方法。

Shutdown 函式中, RpcMgmtStopServerListening 的單一 Null 參數表示本機應用程式應該停止接聽遠端程序呼叫。 RpcServerUnregisterIf的兩個 Null 參數是萬用字元,表示所有介面都應該取消註冊。 FALSE參數表示介面應該立即從登錄中移除,而不是等候擱置的呼叫完成。

/* add this function to hellop.c */
void Shutdown(void)
{
    RPC_STATUS status;
 
    status = RpcMgmtStopServerListening(NULL);
 
    if (status) 
    {
       exit(status);
    }
 
    status = RpcServerUnregisterIf(NULL, NULL, FALSE);
 
    if (status) 
    {
       exit(status);
    }
} //end Shutdown