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에서 요청한 알림 유형을 지정하는 RPC_NOTIFICATIONS 열거형 값의 비트 조합입니다.
Windows Vista: 현재 RpcNotificationClientDisconnect 및 RpcNotificationCallCancel 만 지원됩니다. 이 매개 변수에 대해 다른 값을 지정하면 RPC_S_CANNOT_SUPPORT 오류 코드가 반환됩니다.
[in] NotificationType
RPC_NOTIFICATION_TYPES RPC가 서버에 알릴 메서드를 지정하는 열거형 값입니다.
Windows Vista: RpcNotificationTypeNone 은 지원되지 않습니다. 이 값을 지정하면 RPC_S_INVALID_ARG 오류 코드가 반환됩니다.
[in] NotificationInfo
RPC가 알림을 위해 서버에 연락하는 데 필요한 특정 정보를 포함하는 RPC_ASYNC_NOTIFICATION_INFO 공용 구조체에 대한 포인터입니다. 이 공용 구조체에 포함된 데이터는 NotificationType 매개 변수에 전달된 메서드와 관련이 있습니다.
NotificationTypes에서 RpcNotificationTypeCallback 메서드를 지정하면 공용 구조체의 해당 분기의 NotificationRoutine 멤버가 동기 호출에 대한 바인딩 핸들 및 비동기 호출에 대한 비동기 핸들로 설정됩니다.
RPC는 이 함수를 성공적으로 호출하는 동안 이 매개 변수의 복사본을 만듭니다. 호출자는 API가 반환되면 이 매개 변수를 해제하거나 업데이트할 수 있습니다.
반환 값
이 함수는 성공에 대한 RPC_S_OK 반환합니다. 그렇지 않으면 RPC_S_* 오류 코드가 반환됩니다.
설명
호출자가 RpcNotificationTypeEvent 이외의 알림 유형을 지정하는 경우 단일 호출로 RpcNotificationClientDisconnect 및 RpcNotificationCallCancel 알림을 모두 구독할 수 있습니다. 이벤트의 경우 이 API에 대한 두 개의 별도 호출이 필요합니다.
서버 애플리케이션은 RPC 호출이 완료되기 전에 알림을 구독 취소해야 합니다. RPC 호출이 동기적이면 서버가 RPC에 반환 값을 보낼 때 완료됩니다. RPC 호출이 비동기인 경우 서버가 RpcAsyncCompleteCall 또는 RpcAsyncAbortCall을 호출하거나 관리자 루틴에서 예외를 throw할 때 완료됩니다. 서버가 통화 상태 변경 알림 구독을 취소하지 못하면 결과가 정의되지 않으며 나중에 서버가 충돌할 수 있습니다. 구독은 하나의 RPC 호출에만 적용됩니다. 서버 애플리케이션이 둘 이상의 호출을 모니터링해야 하는 경우 각 호출에 대해 특별히 구독해야 합니다.
서버 애플리케이션은 구독하지 않은 알림에 대한 신호를 받지 않을 것으로 예상할 수 있습니다. 둘 이상의 알림을 구독한 경우 선택한 완료 방법이 허용하는 경우 각 알림이 완료 방법으로 전달됩니다. 알림 통신을 허용하지 않는 경우 서버 애플리케이션은 RPC 서버 API에서 를 호출하여 클라이언트가 취소되었는지 또는 연결이 끊어지는지 테스트할 수 있습니다. 아래 표는 알림 유형(호출 취소 또는 클라이언트 연결 끊기)이 각 알림 메서드에 전달되는 방법을 나타냅니다.
Notification 메서드 | 이벤트/알림 유형 |
---|---|
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 |