XML Web services에서 예외 처리 및 throw
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로 설정된 경우에 전달되는 SoapMessage의 Exception 속성을 확인합니다. 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
개념
기타 리소스
Handling and Throwing Exceptions
ASP.NET을 사용하는 XML Web services
Copyright © 2007 by Microsoft Corporation. All rights reserved.