다음을 통해 공유


WsReceiveMessage 함수(webservices.h)

메시지를 수신하고 메시지 본문을 값으로 역직렬화합니다.

구문

HRESULT WsReceiveMessage(
  [in]           WS_CHANNEL                   *channel,
  [in]           WS_MESSAGE                   *message,
                 const WS_MESSAGE_DESCRIPTION **messageDescriptions,
  [in]           ULONG                        messageDescriptionCount,
  [in]           WS_RECEIVE_OPTION            receiveOption,
  [in]           WS_READ_OPTION               readBodyOption,
  [in, optional] WS_HEAP                      *heap,
                 void                         *value,
  [in]           ULONG                        valueSize,
                 ULONG                        *index,
  [in, optional] const WS_ASYNC_CONTEXT       *asyncContext,
  [in, optional] WS_ERROR                     *error
);

매개 변수

[in] channel

수신할 채널입니다.

[in] message

받는 데 사용되는 메시지 개체입니다.

메시지는 WS_MESSAGE_STATE_EMPTY 상태여야 합니다.

messageDescriptions

예상되는 메시지 유형에 대한 메타데이터를 지정하는 메시지 설명에 대한 포인터 배열입니다.

[in] messageDescriptionCount

messageDescriptions 배열의 항목 수입니다.

[in] receiveOption

메시지가 필요한지 여부입니다. 자세한 내용은 WS_RECEIVE_OPTION 참조하세요.

[in] readBodyOption

본문 요소가 필요한지 여부 및 값을 할당하는 방법입니다.
자세한 내용은 WS_READ_OPTION 참조하세요.

[in, optional] heap

역직렬화된 값을 저장할 힙입니다. 지정된 형식에 힙이 필요하지 않은 경우 이 매개 변수는 NULL일 수 있습니다.

value

이 매개 변수의 해석은 WS_READ_OPTION 따라 달라집니다.

receiveOption 매개 변수에 대해 WS_RECEIVE_OPTIONAL_MESSAGE 지정되고 채널에서 더 이상 메시지를 사용할 수 없는 경우 이 매개 변수는 터치되지 않습니다. 이 경우 함수는 WS_S_END 반환합니다. ( Windows Web Services 반환 값을 참조하세요.)

일치하는 WS_MESSAGE_DESCRIPTION bodyElementDescription이 NULL인 경우 이 매개 변수는 터치되지 않습니다. 이 경우 매개 변수를 지정할 필요가 없습니다.

[in] valueSize

이 매개 변수의 해석은 WS_READ_OPTION 따라 달라집니다.

index

receiveOption 매개 변수에 대해 WS_RECEIVE_OPTIONAL_MESSAGE 지정되고 채널에서 더 이상 메시지를 사용할 수 없는 경우 이 매개 변수는 그대로 유지됩니다. 이 경우 함수는 WS_S_END 반환합니다.

그렇지 않으면 함수가 성공하면 일치하는 항목을 나타내는 메시지 설명 배열에 0부터 시작하는 인덱스가 포함됩니다.

호출자가 값에 관심이 없는 경우(예: 메시지 설명이 하나만 있는 경우) 이 매개 변수는 NULL 일 수 있습니다.

[in, optional] asyncContext

함수를 비동기적으로 호출하는 방법 또는 동기적으로 호출하는 경우 NULL 에 대한 정보입니다.

[in, optional] error

함수가 실패할 경우 추가 오류 정보를 저장할 위치를 지정합니다.

반환 값

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
WS_S_ASYNC
비동기 작업은 아직 보류 중입니다.
WS_S_END
수신 옵션 WS_RECEIVE_OPTIONAL_MESSAGE 지정되었으며 채널에 사용할 수 있는 메시지가 더 이상 없습니다.
WS_E_ENDPOINT_FAULT_RECEIVED
받은 메시지에 오류가 포함되었습니다. WsGetErrorProperty를 사용하여 WS_ERROR 오류를 추출할 수 있습니다.
WS_E_OPERATION_ABORTED
작업이 중단되었습니다.
WS_E_INVALID_OPERATION
개체의 현재 상태로 인해 작업이 허용되지 않습니다.
WS_E_ENDPOINT_NOT_FOUND
원격 엔드포인트가 없거나 위치할 수 없습니다.
WS_E_ENDPOINT_ACCESS_DENIED
원격 엔드포인트에서 액세스가 거부되었습니다.
WS_E_ENDPOINT_DISCONNECTED
원격 엔드포인트와의 연결이 종료되었습니다.
WS_E_ENDPOINT_FAILURE
원격 엔드포인트에서 요청을 처리할 수 없습니다.
WS_E_ENDPOINT_NOT_AVAILABLE
원격 엔드포인트가 현재 이 위치에서 서비스되고 있지 않습니다.
WS_E_ENDPOINT_TOO_BUSY
원격 엔드포인트가 오버로드되어 요청을 처리할 수 없습니다.
WS_E_ENDPOINT_UNREACHABLE
원격 엔드포인트에 연결할 수 없습니다.
WS_E_INVALID_ENDPOINT_URL
엔드포인트 주소 URL이 잘못되었습니다.
WS_E_INVALID_FORMAT
입력 데이터가 예상 형식이 아니거나 예상 값이 없습니다.
WS_E_OPERATION_TIMED_OUT
할당된 시간 내에 작업이 완료되지 않았습니다.
WS_E_PROXY_ACCESS_DENIED
HTTP 프록시 서버에서 액세스가 거부되었습니다.
WS_E_PROXY_FAILURE
HTTP 프록시 서버에서 요청을 처리할 수 없습니다.
WS_E_QUOTA_EXCEEDED
할당량을 초과했습니다.
WS_E_SECURITY_VERIFICATION_FAILURE
수신된 데이터에 대한 보안 확인에 성공하지 못했습니다.
WS_E_SECURITY_SYSTEM_FAILURE
Windows Web Services 프레임워크에서 보안 작업이 실패했습니다.
WS_E_SECURITY_TOKEN_EXPIRED
서버에서 보안 토큰이 만료되어 거부되었습니다.
WS_E_PROXY_REQUIRES_BASIC_AUTH
HTTP 프록시 서버에는 HTTP 인증 체계 '기본'이 필요합니다.
WS_E_PROXY_REQUIRES_DIGEST_AUTH
HTTP 프록시 서버에는 HTTP 인증 체계 '다이제스트'가 필요합니다.
WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH
HTTP 프록시 서버에는 HTTP 인증 체계 'negotiate'가 필요합니다.
WS_E_PROXY_REQUIRES_NTLM_AUTH
HTTP 프록시 서버에는 HTTP 인증 체계 'NTLM'이 필요합니다.
WS_E_SERVER_REQUIRES_BASIC_AUTH
원격 엔드포인트에는 HTTP 인증 체계 '기본'이 필요합니다.
WS_E_SERVER_REQUIRES_DIGEST_AUTH
원격 엔드포인트에는 HTTP 인증 체계 '다이제스트'가 필요합니다.
WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH
원격 엔드포인트에는 HTTP 인증 체계 'negotiate'가 필요합니다.
WS_E_SERVER_REQUIRES_NTLM_AUTH
원격 엔드포인트에는 HTTP 인증 체계 'NTLM'이 필요합니다.
CERT_E_EXPIRED
현재 시스템 클록 또는 서명된 파일의 타임스탬프에 대해 확인할 때 필수 인증서가 유효 기간 내에 있지 않습니다.
CERT_E_CN_NO_MATCH
인증서 CN 이름이 전달된 값과 일치하지 않습니다.
CERT_E_UNTRUSTEDROOT
인증서 체인이 처리되었지만 트러스트 공급자가 신뢰하지 않는 루트 인증서에서 종료되었습니다.
CERT_E_WRONG_USAGE
인증서가 요청된 사용에 유효하지 않은 경우
CRYPT_E_REVOCATION_OFFLINE
해지 서버가 오프라인 상태이므로 해지 함수가 해지를 확인할 수 없습니다.
E_OUTOFMEMORY
메모리가 부족합니다.
E_INVALIDARG
하나 이상의 인수가 잘못되었습니다.
기타 오류
이 함수는 위에 나열되지 않은 다른 오류를 반환할 수 있습니다.

설명

이 함수는 본문을 역직렬화하기 위해 예상된 메시지 형식에 대한 메타데이터를 사용합니다.
메타데이터는 WS_MESSAGE_DESCRIPTION포인터의 배열입니다. 각 메시지 설명에는 메시지 동작과 일치하는 데 사용되는 작업 값과 본문 요소에 대한 메타데이터를 제공하는 WS_ELEMENT_DESCRIPTION 포함됩니다.

메시지 헤더가 수신되면 함수는 배열을 검사하여 작업과 일치하는 항목을 찾습니다. 일치하는 첫 번째 메시지 설명은 본문을 역직렬화하는 데 사용되며 배열에 있는 이 메시지 설명의 인덱스(0부터 시작)는 index out 매개 변수에 반환됩니다. 함수가 성공하면 인덱스 출력 매개 변수는 항상 사용된 메시지 설명을 나타내도록 설정됩니다.

메시지 설명과 일치하려면 작업 값이 메시지의 값과 정확히 일치해야 합니다. WS_MESSAGE_DESCRIPTION 작업이 NULL인 경우 작업은 항상 일치합니다. 수신된 메시지에 작업 헤더가 없거나 작업이 무엇인지에 관계없이 본문이 항상 동일한 경우에 사용할 수 있습니다.

본문이 비어 있을 것으로 예상되는 경우 WS_MESSAGE_DESCRIPTION bodyElementDescription 필드는 NULL일 수 있습니다.

bodyElementDescription이 NULL이 아닌 경우 이 함수는 WsReadBody에 설명된 대로 본문을 역직렬화합니다.

메시지를 받은 후 WsGetHeader 또는 WsGetCustomHeader 를 사용하여 헤더 검사할 수 있습니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 7 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 R2 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 webservices.h
라이브러리 WebServices.lib
DLL WebServices.dll