共用方式為


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: 目前僅支援 RpcNotificationClientDisconnectRpcNotificationCallCancel 。 如果為此參數指定任何其他值,則會傳回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_* 錯誤碼。

注意 如需有效錯誤碼的清單,請參閱 RPC 傳回值
 

備註

如果呼叫端指定 RpcNotificationTypeEvent 以外的任何通知類型,則可以使用單一呼叫來訂閱 RpcNotificationClientDisconnectRpcNotificationCallCancel 通知。 對於事件,需要對此 API 進行兩個不同的呼叫。

伺服器應用程式必須在 RPC 呼叫完成之前取消訂閱通知。 如果 RPC 呼叫是同步的,當伺服器將傳回值傳送至 RPC 時,就會完成此呼叫。 如果 RPC 呼叫是異步的,當伺服器呼叫 RpcAsyncCompleteCallRpcAsyncAbortCall,或從管理員例程擲回例外狀況時,就會完成此呼叫。 如果伺服器無法取消訂閱通話狀態變更通知,則結果為未定義,而且伺服器可能會在稍後當機。 請注意,訂用帳戶僅適用於一個 RPC 呼叫。 如果伺服器應用程式需要監視多個呼叫,則需要特別訂閱每個呼叫。

伺服器應用程式預期不會收到未訂閱通知的訊號。 如果訂閱了一個以上的通知,如果選取的完成方法允許,則每個通知都會傳達給完成方法。 如果不允許通知的通訊,伺服器應用程式可以在 RPC 伺服器 API 上呼叫,以測試用戶端是否已取消或中斷連線。 下表指出通知類型 (呼叫取消或用戶端中斷連線) 如何與每個通知方法通訊:

通知方法 事件/通知類型
RpcNotificationTypeNone 不允許訂用帳戶。
RpcNotificationTypeEvent 無法使用通知類型。
RpcNotificationTypeApc 通知類型位於 APC 函式的 Event 參數中。
RpcNotificationTypeIoc 無法使用通知類型。
RpcNotificationTypeCallback 通知類型位於回呼函式的 Event 參數中。
 

請注意,數據表並不表示呼叫端是否可以使用指定的通知方法來訂閱通知;相反地,它只會指出呼叫端在收到通知時可取得的資訊,例如通知類型。

呼叫端必須在相同系結句柄上的 RpcServerSubscribeForNotificationRpcServerUnsubscribeForNotification 之間進行同步處理。 如果同時呼叫它們,則結果未定義,而且可能會產生遺失的通知、額外的通知、不正確的通知計數、進程當機、數據損毀和記憶體流失。 相同的考慮適用於在相同系結句柄上呼叫 RpcServerSubscribeForNotification 的線程。

在同一個系結句柄上呼叫 RpcServerSubscribeForNotificationRpcServerUnsubscribeForNotification 是安全線程。 針對目前的通知,RPC 不會針對每個呼叫通知伺服器一次以上。

規格需求

需求
最低支援的用戶端 Windows Vista、Windows XP SP2 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008、Windows Server 2003 SP1 [僅限傳統型應用程式]
目標平台 Windows
標頭 rpcasync.h (包含 Rpc.h)
程式庫 Rpcrt4.lib
Dll Rpcrt4.dll

另請參閱

RpcServerUnsubscribeForNotification