다음을 통해 공유


Errors

이 섹션에서는 명령 실행 실패로 인해 Windows Web Services 함수에 의해 문제가 될 수 있는 오류를 간략하게 설명합니다.

Out 매개 변수

일반적으로 함수가 실패하면 out 매개 변수 값이 수정되지 않습니다.

함수가 실패할 경우 out 매개 변수가 수정되는 몇 가지 인스턴스가 있습니다. 이러한 경우는 각 매개 변수에 대한 설명서에서 명시적으로 호출됩니다. 설명서에서 실패 시 매개 변수를 수정하는 방법에 대해 아무것도 멘션 않으면 함수가 매개 변수를 수정하지 않는다고 가정할 수 있습니다.

오류 코드

모든 오류 반환 코드는 HRESULT입니다. 이 API는 FACILITY_WEBSERVICES 범위에서 HRESULT 집합을 정의하지만 Windows API의 다른 곳에서 정의된 오류도 반환합니다.

반환되는 오류 코드에 대해 알아보려면 특정 API에 대한 설명서를 참조하세요. 목록은 각 API에 대해 완전하지 않고 명시적 처리에 대한 일반적인 시나리오가 있는 오류 코드 목록입니다. 호출자는 항상 API에서 다른 오류 코드가 가능하다고 가정해야 합니다.

이 API는 프로그램이 오류에 따라 작업을 수행하려는 시나리오에 해당하는 비교적 적은 수의 오류 코드를 정의합니다. 오류 코드만으로는 무엇이 잘못되었는지 확인하거나 사용자에게 문제에 대한 적절한 설명을 제공하기 위해 충분하지 않을 수 있습니다. 문제에 대한 가장 좋은 이해는 아래 설명된 대로 다양한 오류를 사용하는 것입니다.

다양한 오류

오류 코드를 반환하는 것 외에도 호출자는 필요에 따라 NULL이 아닌 WS_ERROR 개체를 전달하여 API 호출에 대한 풍부한 오류 정보를 요청할 수 있습니다. 오류 개체를 만들려면 WsCreateError를 사용합니다. 오류가 있는 경우 오류를 발생시킨 API는 오류 상황에 대한 추가 컨텍스트로 오류 개체를 채웁니다. 오류가 없으면 오류 개체가 수정되지 않습니다. NULL 오류 개체를 전달하면 호출자가 풍부한 오류 정보에 관심이 없음을 나타냅니다. 호출자(콜백 포함)는 NULL 오류 개체를 처리하도록 준비해야 합니다.

동일한 오류 개체는 여러 API 호출에 사용할 수 있지만 단일 스레드이므로 한 번에 하나의 API 호출에만 사용할 수 있습니다. 오류가 발생할 때마다 오류 개체에 오류 정보가 추가됩니다. 호출 체인이 해제되면 여러 함수가 오류 개체에 정보를 추가하여 오류에 대한 추가 컨텍스트를 제공할 수 있습니다. 오류 개체를 다시 사용하기 전에 오류 개체의 내용을 지우려면(오류가 발생한 후) WsResetError를 사용합니다. 오류가 발생하지 않으면 다시 사용하기 전에 오류 개체를 다시 설정할 필요가 없습니다.

풍부한 오류 정보는 다음으로 구성됩니다.

  • 오류에 대한 추가 정보(있는 경우)를 제공하는 속성 값 집합입니다. WS_ERROR_PROPERTY 참조하세요.
  • 오류 문자열이 0개 이상입니다. 문자열은 WsAddErrorString을 사용하여 추가되며 WsGetErrorString을 사용하여 쿼리할 수 있습니다. WS_ERROR_PROPERTY_STRING_COUNT 사용하여 문자열 수를 쿼리할 수 있습니다.

오류 및 오류

오류와 오류의 관계에 대한 자세한 내용은 오류를 참조하세요.

언어 중요 오류 정보

오류 개체를 만들 때 오류 정보에 대해 원하는 언어 번역의 LANGID가 지정됩니다. 오류 개체에 오류 정보를 추가할 때 사용됩니다.

이 언어 값은 WS_ERROR_PROPERTY_LANGID 사용하여 검색하거나 설정할 수 있습니다.

정식 오류 코드

이 API는 특정 기본 구현의 특정 오류 코드에 의존하지 않고도 다양한 통신 기술을 사용할 수 있도록 하는 정식 오류 코드 집합(WS_E_*)을 제공합니다. 이러한 오류 코드의 전체 목록은 Windows Web Services 반환 값을 참조 하세요.

예를 들어 프로그램이 TCP, UDP 또는 HTTP를 사용하는지 WS_E_ENDPOINT_NOT_FOUND 오류 코드에 대해 검사 다른 엔드포인트를 사용하려고 시도하는 것과 같은 몇 가지 작업을 수행할 수 있습니다.

구현별 오류 코드가 정식 오류에 매핑되는 경우 원래 오류 코드는 오류 개체에 저장되며 진단 목적으로 계속 액세스할 수 있습니다. 자세한 내용은 WS_ERROR_PROPERTY_ORIGINAL_ERROR_CODE 참조하세요.

잘못된 API 사용

다음 오류 코드는 잘못된 API 사용을 위해 예약되어 있으며 다른 상황에서는 반환되지 않습니다. 이러한 오류가 반환되면 애플리케이션 버그가 표시될 수 있습니다.

  • WS_E_INVALID_OPERATION
  • E_INVALIDARG

다음 열거형은 추적의 일부입니다.

다음 오류 코드는 추적의 일부입니다.

  • CERT_E_CN_NO_MATCH
  • CERT_E_EXPIRED
  • CERT_E_UNTRUSTEDROOT
  • CERT_E_WRONG_USAGE
  • CRYPT_E_REVOCATION_OFFLINE
  • E_INVALIDARG
  • E_OUTOFMEMORY
  • WS_E_ADDRESS_IN_USE
  • WS_E_ADDRESS_NOT_AVAILABLE
  • WS_E_ENDPOINT_ACCESS_DENIED
  • WS_E_ENDPOINT_ACTION_NOT_SUPPORTED
  • WS_E_ENDPOINT_DISCONNECTED
  • WS_E_ENDPOINT_FAILURE
  • WS_E_ENDPOINT_FAULT_RECEIVED
  • WS_E_ENDPOINT_NOT_AVAILABLE
  • WS_E_ENDPOINT_NOT_FOUND
  • WS_E_ENDPOINT_TOO_BUSY
  • WS_E_ENDPOINT_UNREACHABLE
  • WS_E_INVALID_ENDPOINT_URL
  • WS_E_INVALID_FORMAT
  • WS_E_INVALID_OPERATION
  • WS_E_NOT_SUPPORTED
  • WS_E_NO_TRANSLATION_AVAILABLE
  • WS_E_NUMERIC_OVERFLOW
  • WS_E_OBJECT_FAULTED
  • WS_E_OPERATION_ABANDONED
  • WS_E_OPERATION_ABORTED
  • WS_E_OPERATION_TIMED_OUT
  • WS_E_OTHER
  • WS_E_PROXY_ACCESS_DENIED
  • WS_E_PROXY_FAILURE
  • WS_E_PROXY_REQUIRES_BASIC_AUTH
  • WS_E_PROXY_REQUIRES_DIGEST_AUTH
  • WS_E_PROXY_REQUIRES_NEGOTIATE_AUTH
  • WS_E_PROXY_REQUIRES_NTLM_AUTH
  • WS_E_QUOTA_EXCEEDED
  • WS_E_SECURITY_SYSTEM_FAILURE
  • WS_E_SECURITY_TOKEN_EXPIRED
  • WS_E_SECURITY_VERIFICATION_FAILURE
  • WS_E_SERVER_REQUIRES_BASIC_AUTH
  • WS_E_SERVER_REQUIRES_DIGEST_AUTH
  • WS_E_SERVER_REQUIRES_NEGOTIATE_AUTH
  • WS_E_SERVER_REQUIRES_NTLM_AUTH
  • WS_S_ASYNC
  • WS_S_END

다음 함수는 추적의 일부입니다.

다음 핸들은 추적의 일부입니다.

다음 구조는 추적의 일부입니다.

보안

오류 개체의 사용자가 알아야 할 여러 가지 보안 고려 사항이 있습니다.

  • 오류 개체에 신뢰할 수 없는 데이터가 포함될 수 있습니다. 이 예제는 WS_FAULT 및 오류 문자열이며, 둘 다 신뢰할 수 없는 채널을 통해 받은 정보에 따라 오류 개체에 저장할 수 있습니다. 오류 개체의 사용자는 오류 개체의 정보를 검사하고 해당 값에 따라 결정을 내릴 때 주의해야 합니다.
  • 오류 개체의 사용자는 오류에 대한 정보를 검사한 후 WsResetError를 호출해야 합니다. 이렇게 하지 않으면 메모리가 누적됩니다.
  • 생성된 오류에 오류 기록 프로세스의 일부로 누적된 개인 정보가 포함될 수 있으므로 오류 개체의 사용자는 WS_FAULT_DISCLOSURE 열거형의 WS_FULL_FAULT_DISCLOSURE 값을 사용할 때 매우 주의해야 합니다.