이 디자인에서는 예외 처리를 제안하고 있습니다.다형성을 통한 예외 처리
- 던져 새로운 오류 예외 < BusinessRuleViolationFault> (...)
- 던져 새로운 오류 예외 < SomeOtherViolationFault> (...) :
- ...
- ...
나는 다른 오류 예외의 유형을 던졌습니다 WCF 서비스를 excep
이 모든 결함 클래스는 IViolationFault라는 인터페이스를 구현합니다.이 인터페이스에는 단일 HandleException 메소드가 있습니다. 각 메소드의 구현은 클래스에 따라 다릅니다. 예를 들어 이러한 예외 클래스가 클라이언트에서 발견되면 HandleException() 메서드를 호출하면 오류 유형을 구분하는 IF 조건을 작성하지 않고도 처리 할 수 있습니다. BusinessRuleViolationFault의 HandleException() 메소드에 난 그냥 다른 하나에 내가 어딘가를 기록뿐만 아니라 다른 액션을 트리거 할 수 있습니다 동안 ...,
catch (FaultException<BusinessRuleViolationFault> ex)
{
ex.HandleException();
}
catch (FaultException<SomeOtherViolationFault> ex)
{
ex.HandleException();
}
질문
을 화면에 메시지를 표시 할 수 있습니다- 접근 방법에 문제가 있습니까?
- catch 블록 수를 줄일 수있는 방법이 있습니까? 하나의 catch 블록이 모든 예외 유형을 처리합니까?
- 예외를 처리하는 동안 이것이 다형성을 유지하는 데 좋은 객체 지향적 인 방법입니까?
EDIT
필자는베이스 클래스로부터 상속 대신 인터페이스를 구현하는 코드를 변경. 내 BusinessRuleViolationFault 클래스에는 HandleException 메서드가 있지만 클라이언트 catch 블록에서 HandleException 메서드를 가져올 수 없습니다. 무엇이 잘못 되었습니까? 이는이 날이에 대한 당신의 생각을하자 DO 내 BusinessRuleViolationFault 코드
[DataContract]
public class BusinessRuleViolationFault : BaseFault
{
public BusinessRuleViolationFault(string message)
: base(message)
{
}
[OperationContract]
public override string HandleException()
{
return "BusinessRuleViolationFault executed";
}
}
[DataContract]
public abstract class BaseFault
{
public BaseFault(string message)
{
Message = message;
}
[DataMember]
public string Message { get; set; }
[OperationContract]
public abstract string HandleException();
}
인 서비스
BusinessRuleViolationFault bf = new BusinessRuleViolationFault("");
throw new FaultException<BusinessRuleViolationFault>(bf, new FaultReason(new FaultReasonText("Fault reason here")));
에 슬로우됩니다 방법이다. 시간 내 주셔서 감사합니다 ...
왜 예외로 제네릭을 사용하고 있습니까? 어떻게하면 더 쉽게 살 수 있습니까? –
@ Yves M. 질문에 _wcf_ 태그가 지정되었습니다. ['FaultException'] (http://msdn.microsoft.com/en-us/library/ms576199.aspx)을 사용하는 WCF에서 오류 계약을 구현하는 방법입니다. –
'[DataContract] 내부의'[OperationContract]'는 무의미합니다. WCF 기본 사항을 읽어야합니다. - 죄송합니다. –