다음을 통해 공유


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: 현재 RpcNotificationClientDisconnectRpcNotificationCallCancel 만 지원됩니다. 이 매개 변수에 대해 다른 값을 지정하면 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_* 오류 코드가 반환됩니다.

참고 유효한 오류 코드 목록은 RPC 반환 값을 참조하세요.
 

설명

호출자가 RpcNotificationTypeEvent 이외의 알림 유형을 지정하는 경우 단일 호출로 RpcNotificationClientDisconnectRpcNotificationCallCancel 알림을 모두 구독할 수 있습니다. 이벤트의 경우 이 API에 대한 두 개의 별도 호출이 필요합니다.

서버 애플리케이션은 RPC 호출이 완료되기 전에 알림을 구독 취소해야 합니다. RPC 호출이 동기적이면 서버가 RPC에 반환 값을 보낼 때 완료됩니다. RPC 호출이 비동기인 경우 서버가 RpcAsyncCompleteCall 또는 RpcAsyncAbortCall을 호출하거나 관리자 루틴에서 예외를 throw할 때 완료됩니다. 서버가 통화 상태 변경 알림 구독을 취소하지 못하면 결과가 정의되지 않으며 나중에 서버가 충돌할 수 있습니다. 구독은 하나의 RPC 호출에만 적용됩니다. 서버 애플리케이션이 둘 이상의 호출을 모니터링해야 하는 경우 각 호출에 대해 특별히 구독해야 합니다.

서버 애플리케이션은 구독하지 않은 알림에 대한 신호를 받지 않을 것으로 예상할 수 있습니다. 둘 이상의 알림을 구독한 경우 선택한 완료 방법이 허용하는 경우 각 알림이 완료 방법으로 전달됩니다. 알림 통신을 허용하지 않는 경우 서버 애플리케이션은 RPC 서버 API에서 를 호출하여 클라이언트가 취소되었는지 또는 연결이 끊어지는지 테스트할 수 있습니다. 아래 표는 알림 유형(호출 취소 또는 클라이언트 연결 끊기)이 각 알림 메서드에 전달되는 방법을 나타냅니다.

Notification 메서드 이벤트/알림 유형
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