用戶端/伺服器應用程式指導方針
用戶端/伺服器應用程式不得假設單一電腦連線相當於單一使用者會話。 這是 IP 位址和電腦名稱稱中所討論問題的特殊案例。
若要唯一識別用戶端/伺服器連線,每個用戶端模組都必須使用唯一的名稱或識別碼。 應用程式可以使用具名物件或管道、通訊端或其他 IPC 方法。 如需詳細資訊,請參閱 核心物件命名空間。
若要相容遠端桌面服務,用戶端/伺服器應用程式中的伺服器模組必須能夠處理從同一部電腦連線的多個用戶端。 若要達成此目的,伺服器模組必須透過定義完善的全域介面來接受用戶端連線,例如 RPC 或具名管道。 伺服器和用戶端必須交涉每個使用者會話的不同通道。 用戶端必須使用可輕鬆支援這類作業的通訊協定來建立伺服器的連線,例如 TCP/IP,其中每個用戶端應用程式可以使用不同的通訊端連線。
用戶端模組可以呼叫 ProcessIdToSessionId 函式,以擷取其遠端桌面服務會話的識別碼。 然後,用戶端會使用某種形式的處理序間通訊,將其會話識別碼傳遞至伺服器模組。 然後,用戶端和伺服器模組可以使用會話識別碼來設定私人通道。 例如,伺服器模組可以使用會話識別碼來存取會話命名空間中的核心物件。
此外,伺服器模組可以使用 WTSQuerySessionInformation 呼叫中的會話識別碼來擷取用戶端的其他資訊。 伺服器模組也可以使用 WTSSendMessage 呼叫中的會話識別碼,在用戶端終端機上顯示訊息。 伺服器模組也可以建立兩個事件來監視與會話的用戶端連線和中斷連線。 不過,必須在遠端桌面工作階段主機 (RD 工作階段主機) 伺服器上註冊,才能執行此動作。 如需詳細資訊,請參閱 監視會話連線和中斷連線。
使用者輸入的提示是用戶端/伺服器應用程式的潛在問題來源。 例如,如果服務呼叫 MessageBox 函式,訊息方塊會顯示在 RD 工作階段主機伺服器的桌面上,而不是在用戶端桌面上。 若要在用戶端桌面上顯示訊息,服務可以呼叫 WtsSendMessage 函式。 或者,服務可以從用戶端模組要求輸入,而用戶端模組可以顯示使用者介面,並將產生的輸入傳回給服務。
從多個會話繁衍的進程可以透過使用共用記憶體區塊,將資料傳送至彼此,並從彼此接收資料。 如需詳細資訊,請參閱 建立具名共用記憶體。 共用記憶體無法在下列情況下使用:
- 使用共用記憶體區塊的進程是由多個會話繁衍。
- 會話會共用相同的使用者驗證認證。