rpcServerSubscribeForNotification 函式 (rpcasync.h)
RpcServerSubscribeForNotification 函式會訂閱伺服器以取得 RPC 通知。
語法
RPC_STATUS RpcServerSubscribeForNotification(
[in] RPC_BINDING_HANDLE Binding,
[in] RPC_NOTIFICATIONS Notification,
[in] RPC_NOTIFICATION_TYPES NotificationType,
[in] RPC_ASYNC_NOTIFICATION_INFO *NotificationInfo
);
參數
[in] Binding
RPC_BINDING_HANDLE 結構,其中包含目前呼叫的系結句柄。 如果在 RPC 分派呼叫所在的相同線程上呼叫此函式,可以將此參數設定為 NULL;否則,必須傳入此參數中的明確系結句柄。
[in] Notification
RPC_NOTIFICATIONS列舉值的位元組合,指定伺服器從 RPC 所要求的通知類型。
Windows Vista: 目前僅支援 RpcNotificationClientDisconnect 和 RpcNotificationCallCancel 。 如果為此參數指定任何其他值,則會傳回RPC_S_CANNOT_SUPPORT錯誤碼。
[in] NotificationType
RPC_NOTIFICATION_TYPES 列舉值,指定 RPC 通知伺服器的方法。
Windows Vista:不支援 RpcNotificationTypeNone。 如果指定這個值,則會傳回RPC_S_INVALID_ARG錯誤碼。
[in] NotificationInfo
RPC_ASYNC_NOTIFICATION_INFO聯集的指標,其中包含 RPC 連絡伺服器以取得通知所需的特定資訊。 這個等位中包含的數據專屬於傳遞給 NotificationType 參數的方法。
如果在 NotificationTypes 中指定 RpcNotificationTypeCallback 方法,則等位對應分支的 NotificationRoutine 成員會設定為同步呼叫的系結句柄,以及異步呼叫的異步句柄。
RPC 會在成功呼叫此函式期間複製此參數。 呼叫端可以在 API 傳回時釋出或更新此參數。
傳回值
此函式會在成功時傳回RPC_S_OK;否則,會傳回RPC_S_* 錯誤碼。
備註
如果呼叫端指定 RpcNotificationTypeEvent 以外的任何通知類型,則可以使用單一呼叫來訂閱 RpcNotificationClientDisconnect 和 RpcNotificationCallCancel 通知。 對於事件,需要對此 API 進行兩個不同的呼叫。
伺服器應用程式必須在 RPC 呼叫完成之前取消訂閱通知。 如果 RPC 呼叫是同步的,當伺服器將傳回值傳送至 RPC 時,就會完成此呼叫。 如果 RPC 呼叫是異步的,當伺服器呼叫 RpcAsyncCompleteCall 或 RpcAsyncAbortCall,或從管理員例程擲回例外狀況時,就會完成此呼叫。 如果伺服器無法取消訂閱通話狀態變更通知,則結果為未定義,而且伺服器可能會在稍後當機。 請注意,訂用帳戶僅適用於一個 RPC 呼叫。 如果伺服器應用程式需要監視多個呼叫,則需要特別訂閱每個呼叫。
伺服器應用程式預期不會收到未訂閱通知的訊號。 如果訂閱了一個以上的通知,如果選取的完成方法允許,則每個通知都會傳達給完成方法。 如果不允許通知的通訊,伺服器應用程式可以在 RPC 伺服器 API 上呼叫,以測試用戶端是否已取消或中斷連線。 下表指出通知類型 (呼叫取消或用戶端中斷連線) 如何與每個通知方法通訊:
通知方法 | 事件/通知類型 |
---|---|
RpcNotificationTypeNone | 不允許訂用帳戶。 |
RpcNotificationTypeEvent | 無法使用通知類型。 |
RpcNotificationTypeApc | 通知類型位於 APC 函式的 Event 參數中。 |
RpcNotificationTypeIoc | 無法使用通知類型。 |
RpcNotificationTypeCallback | 通知類型位於回呼函式的 Event 參數中。 |
請注意,數據表並不表示呼叫端是否可以使用指定的通知方法來訂閱通知;相反地,它只會指出呼叫端在收到通知時可取得的資訊,例如通知類型。
呼叫端必須在相同系結句柄上的 RpcServerSubscribeForNotification 和 RpcServerUnsubscribeForNotification 之間進行同步處理。 如果同時呼叫它們,則結果未定義,而且可能會產生遺失的通知、額外的通知、不正確的通知計數、進程當機、數據損毀和記憶體流失。 相同的考慮適用於在相同系結句柄上呼叫 RpcServerSubscribeForNotification 的線程。
在同一個系結句柄上呼叫 RpcServerSubscribeForNotification 和 RpcServerUnsubscribeForNotification 是安全線程。 針對目前的通知,RPC 不會針對每個呼叫通知伺服器一次以上。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista、Windows XP SP2 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008、Windows Server 2003 SP1 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | rpcasync.h (包含 Rpc.h) |
程式庫 | Rpcrt4.lib |
Dll | Rpcrt4.dll |