XML Web services에서 예외 처리 및 throw

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.

ASP.NET을 사용하여 만든 웹 서비스 메서드에서 throw한 예외는 SOAP 오류의 형태로 클라이언트에 다시 전송됩니다. SOAP 오류는 오류 발생 시점을 나타내는 SOAP 메시지의 Fault XML 요소이며, 예외 문자열, 예외 소스 등과 같은 세부 정보를 포함할 수 있습니다. SOAP 오류에 대한 자세한 내용은 W3C 웹 사이트(http://www.w3.org/TR/SOAP)의 SOAP 사양을 참조하십시오.

ASP.NET으로 만든 클라이언트와 웹 서비스는 모두 Fault XML 요소를 직접 채우거나 구문 분석하지 않고, 대신 .NET Framework에서 예외를 throw 및 catch하기 위한 공통 디자인 패턴을 사용합니다. 웹 서비스는 제네릭 SoapException 또는 특정 문제에 대한 예외(예: ArgumentOutOfRangeException)를 throw할 수 있습니다. 어느 경우든 ASP.NET은 예외를 SOAP Fault 요소에 배치하여 유효한 SOAP 메시지로 serialize합니다. SOAP 메시지가 ASP.NET 클라이언트에서 deserialize되면 SOAP 오류가 SoapException 예외로 변환되고 Message 속성에 예외 정보가 표시됩니다. 클라이언트는 try/catch 블록을 설정하여 SoapException을 catch할 수 있습니다. 예외를 throw하는 웹 서비스의 코드 예제는 방법: ASP.NET을 사용하여 만든 웹 서비스에서 예외 throw를 참조하십시오. 예외를 catch하는 웹 서비스 클라이언트의 코드 예제는 방법: 웹 서비스 메서드에서 throw한 예외 처리를 참조하십시오.

하나의 웹 응용 프로그램은 여러 개의 웹 서비스로 구성될 수 있습니다. Global.asax 구문 파일의 Application_Error 이벤트는 전역 예외 처리에 사용될 수 없습니다. 웹 서비스의 HttpHandler는 웹 서비스 실행 시 발생하는 예외를 사용하며 Application_Error 이벤트가 호출되기 전에 해당 예외를 SOAP 오류로 변환합니다. 전역 예외 처리기에서 웹 서비스 예외를 처리하도록 SOAP 확장을 빌드합니다. SOAP 확장은 ProcessMessage 메서드에 예외가 있는지를 확인할 수 있습니다. ProcessMessage 메서드에서 Stage 속성이 AfterSerialize로 설정된 경우에 전달되는 SoapMessageException 속성을 확인합니다. SOAP 확장에 대한 자세한 내용은 SOAP 확장을 사용하는 SOAP 메시지 수정을 참조하십시오.

ASP.NET을 사용하여 만든 웹 서비스의 예외 throw

오류는 예외 throw를 통해 클라이언트에게 다시 전파됩니다. 웹 서비스 메서드는 다음과 같은 방법으로 오류를 전파할 수 있습니다.

  • SoapException 예외를 throw합니다.

  • SoapHeaderException 예외를 throw합니다.

  • 특정 문제에 대한 예외를 throw합니다.

  • ASP.NET에서 예외를 throw하도록 허용합니다.

다음 표에서는 웹 서비스에서 명시적으로 throw할 수 있는 예외와 ASP.NET 클라이언트에서 각 예외를 받는 방법에 대해 설명합니다.

throw된 예외의 형식 웹 서비스에서 수행할 수 있는 작업, 클라이언트에서 받는 항목

SoapException 또는 SoapHeaderException 이외의 예외

웹 서비스 메서드에서 예외 사례를 검색하여 ArgumentOutOfRangeException과 같은 특정 예외를 throw합니다. .NET Framework 클라이언트는 Message 속성에 텍스트로 serialize된 예외 정보와 함께 SoapException을 받습니다.

SoapException

웹 서비스 메서드에서 예외 사례를 검색하여 SoapException을 throw합니다. 또한 문제와 관련된 추가 정보를 제공합니다. 웹 서비스 메서드에서는 Detail 속성을 채워 이 추가 정보를 제공합니다. .NET Framework 클라이언트는 추가 정보와 함께 SoapException을 받습니다.

SoapHeaderException

웹 서비스 메서드에서 SOAP Header 요소를 처리하는 동안 예외 사례를 검색합니다. 웹 서비스 메서드는 응답의 Header 요소 내의 Fault 요소로 변환되는 SoapHeaderException을 throw합니다. 이 경우 SOAP 사양에 따라 오류가 응답 헤더에 표시되어야 합니다. .NET Framework 클라이언트에서 SoapHeaderException을 받습니다.

위의 표에 설명된 것처럼 특정 문제에 대한 예외를 throw하거나 SoapException 또는 SoapHeaderException에 추가 정보를 제공해야 합니다.

XML Web Service 메서드에서 처리되지 않는 예외

웹 서비스 메서드가 메서드에서 발생한 예외를 catch하지 못할 경우 다음 표를 참조하십시오. 이 표에는 ASP.NET에서 예외를 처리하는 방법이 간략하게 설명되어 있습니다.

처리되지 않는 예외가 발생하는 경우 ASP.NET에서 수행하는 작업

웹 서비스 메서드를 실행할 때

ASP.NET에서 예외를 catch하여 클라이언트에 다시 throw합니다. .NET Framework를 사용하여 만든 웹 서비스 클라이언트에서는 Message 속성에 있는 예외 정보와 함께 SoapException을 받습니다.

SOAP 헤더 처리 중

ASP.NET이 SoapHeaderException을 throw합니다. .NET Framework를 사용하여 만든 웹 서비스 클라이언트에서는 SoapHeaderException을 받습니다.

참고 항목

작업

방법: ASP.NET을 사용하여 만든 웹 서비스에서 예외 throw
방법: 웹 서비스 메서드에서 throw한 예외 처리

참조

SoapException Class
SoapHeaderException Class

개념

XML Web services 클라이언트 빌드

기타 리소스

Handling and Throwing Exceptions
ASP.NET을 사용하는 XML Web services