계약 및 서비스에서 오류 지정 및 처리
WCF(Windows Communication Foundation) 응용 프로그램은 관리되는 예외 개체를 SOAP 오류 개체에 매핑하고 SOAP 오류 개체를 관리되는 예외 개체에 매핑하여 오류 상황을 처리합니다. 이 단원의 항목에서는 사용자 지정 SOAP 오류와 같은 오류 조건을 노출하도록 계약을 디자인하는 방법, 이러한 오류를 서비스 구현의 일부로 반환하는 방법 및 클라이언트가 이러한 오류를 catch하는 방법에 대해 설명합니다.
오류 처리 개요
관리되는 모든 응용 프로그램에서 처리 오류는 Exception 개체로 표시됩니다. WCF 응용 프로그램 같은 SOAP 기반 응용 프로그램의 경우 서비스 메서드는 SOAP 오류 메시지를 사용하여 처리 오류 정보와 통신합니다. SOAP 오류는 서비스 작업의 메타데이터에 포함된 메시지 유형이므로 클라이언트가 작업을 더욱 견고하게 만들거나 대화형으로 만드는 데 사용할 수 있는 오류 계약을 만듭니다. 또한 SOAP 오류가 클라이언트에 XML 형식으로 표시되기 때문에 SOAP 플랫폼의 클라이언트가 사용할 수 있는 상호 운용성이 높은 형식의 시스템으로서 WCF 응용 프로그램으로의 연결이 쉬워집니다.
WCF 응용 프로그램은 두 가지 유형의 오류 시스템 모두에서 실행되기 때문에 클라이언트로 보내진 관리되는 예외 정보를 예외에서 서비스의 SOAP 오류로 변환하고, 보내며, SOAP 오류에서 WCF 클라이언트의 오류 예외로 변환해야 합니다. 또한 이중 클라이언트의 경우 클라이언트 계약에서 SOAP 오류를 서비스로 다시 보낼 수 있습니다. 이러한 경우 기본 서비스 예외 동작을 사용하거나, 오류 메시지에 예외 매핑 여부 및 방법을 명시적으로 제어할 수 있습니다.
두 가지 유형의 SOAP 오류를 선언된 및 선언되지 않은 상태로 보낼 수 있습니다. 선언된 SOAP 오류는 작업에 사용자 지정 SOAP 오류 유형을 지정하는 System.ServiceModel.FaultContractAttribute 특성이 있는 오류입니다. 선언되지 않은 SOAP 오류는 작업 계약에 지정되지 않은 오류입니다.
서비스 작업에서 FaultContractAttribute 특성을 사용하여 클라이언트가 정상적인 작업 과정에서 받을 수 있는 모든 SOAP 오류를 공식적으로 지정하여 해당 오류를 선언하는 것이 좋습니다. 또한 클라이언트가 알아야 하는 정보만 SOAP 오류에 반환하여 정보 공개를 최소화하는 것이 좋습니다.
일반적으로 서비스 및 이중 클라이언트는 다음 단계를 수행하여 오류 처리를 해당 응용 프로그램에 통합합니다.
- 예외 조건을 사용자 지정 SOAP 오류에 매핑합니다.
- 클라이언트 및 서비스가 SOAP 오류를 예외로 보내고 받습니다.
또한 WCF 클라이언트 및 서비스는 디버깅을 위해 선언되지 않은 SOAP 오류를 사용하고 기본 오류 동작을 확장할 수 있습니다. 다음 단원에서는 이러한 작업 및 개념에 대해 설명합니다.
SOAP 오류에 예외 매핑
오류 조건을 처리하는 작업을 만들기 위한 첫 번째 단계는 클라이언트 응용 프로그램이 오류에 대한 정보를 받아야 하는 조건을 결정하는 것입니다. 일부 작업에는 해당 기능 관련 오류 조건이 포함되어 있습니다. 예를 들어 PurchaseOrder
작업에서는 더 이상 구매 주문을 시작하는 것이 허용되지 않는 고객에게 특정 정보가 반환될 수 있습니다. 다른 경우에는 Calculator
서비스와 같이 매우 일반적인 MathFault
SOAP 오류가 전체 서비스에 대한 모든 오류 조건을 설명할 수 있습니다. 서비스의 클라이언트가 오류 조건을 식별하면 사용자 지정 SOAP 오류를 생성할 수 있으며 해당 오류 조건이 발생할 때 사용자 지정 SOAP 오류를 반환하도록 작업을 표시할 수 있습니다.
서비스 또는 클라이언트를 개발하는 이 단계에 대한 자세한 내용은 오류 정의 및 지정을 참조하십시오.
클라이언트 및 서비스가 SOAP 오류를 예외로 처리
작업 오류 조건 식별, 사용자 지정 SOAP 오류 정의 및 이러한 오류를 반환하는 것으로 해당 작업을 표시하는 것은 WCF 응용 프로그램에서 오류를 처리하기 위한 첫 번째 단계입니다. 다음 단계는 이러한 오류를 보내고 받는 것을 제대로 구현하는 것입니다. 일반적으로 서비스는 클라이언트 응용 프로그램에게 오류 조건에 대한 정보를 알리기 위해 오류를 보내지만 이중 클라이언트도 SOAP 오류를 서비스에 보낼 수 있습니다.
자세한 내용은 오류 보내기 및 받기를 참조하십시오.
선언되지 않은 SOAP 오류 및 디버깅
선언된 SOAP 오류는 강력하고 상호 운용 가능하며 배포된 응용 프로그램에 특히 유용합니다. 그러나 일부 경우에서는 서비스 또는 이중 클라이언트가 해당 작업에 대해 WSDL(웹 서비스 기술 언어)에서 언급되지 않은 오류인 선언되지 않은 SOAP 오류를 보내는 데 유용합니다. 예를 들어 서비스를 개발할 때 클라이언트에게 정보를 다시 보내기 위해 디버깅에 유용하지만 예기치 않은 상황이 발생할 수 있습니다. 또한 System.ServiceModel.ServiceBehaviorAttribute.IncludeExceptionDetailInFaults 속성 또는 System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults 속성을 true로 설정하여 WCF 클라이언트가 내부 서비스 작업 예외에 대한 정보를 가져올 수 있습니다. 개별 오류를 보내고 디버깅 동작 속성을 설정하는 작업에 대해서는 오류 보내기 및 받기를 참조하십시오.
참고
관리되는 예외는 내부 응용 프로그램 정보를 노출할 수 있으므로 System.ServiceModel.ServiceBehaviorAttribute.IncludeExceptionDetailInFaults 또는 System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults를 true로 설정하면 WCF 클라이언트에서는 개인적으로 식별할 수 있는 정보나 기타 중요한 정보를 비롯하여 내부 서비스 작업 예외에 대한 정보를 얻을 수 있습니다.
그러므로 임시로 서비스 응용 프로그램을 디버깅하려는 경우 System.ServiceModel.ServiceBehaviorAttribute.IncludeExceptionDetailInFaults 또는 System.ServiceModel.Description.ServiceDebugBehavior.IncludeExceptionDetailInFaults를 true로 설정하는 것이 유일한 좋은 방법입니다. 또한 이 방법으로 처리되지 않은 관리되는 예외를 반환하는 메서드의 WSDL에는 ExceptionDetail 형식의 FaultException에 대한 계약이 포함되지 않습니다. 디버깅 정보를 제대로 얻으려면 클라이언트는 System.ServiceModel.FaultException 개체로 WCF 클라이언트에 반환되는 알 수 없는 SOAP 오류의 가능성을 예상해야 합니다.IErrorHandler를 사용하여 오류 처리 사용자 지정
응용 프로그램 수준 예외가 발생하는 경우 클라이언트에 대한 응답 메시지를 사용자 지정하거나 응답 메시지를 반환한 후 일부 사용자 지정 처리 작업을 수행하기 위한 특수 요구 사항이 있는 경우 System.ServiceModel.Dispatcher.IErrorHandler 인터페이스를 구현합니다.
참고 항목
참조
FaultException
FaultContractAttribute
FaultException
XmlSerializer
XmlSerializerFormatAttribute
FaultContractAttribute
CommunicationException
Action
Code
Reason
SubCode
IsOneWay