선택 사항 3. 기본 예외가 이미 원격을 지원하거나 다른 방법을 사용하면 에 remoting이 추가되지 않습니다.
"예외"라는 주석의 주석은 다음과 같습니다. 테스트 작성자가 염두에 두었던 것이 아닌 것 같습니다 :
WCF 서비스에서 처리되지 않은 예외가 서비스 밖으로 전파되도록 허용 할 수 있습니다. WCF는 구성에 따라 처리되지 않은 예외의 세부 사항을 포함하거나 포함하지 않을 수있는 SOAP 오류로 변환합니다.
특정 예외 집합을 인식하고 고의적으로 SOAP 오류로 변환하는 것이 더 낫습니다. 예를 들어 데이터베이스 엔티티에서 작동하는 서비스는 엔티티가 발견되지 않을 수도 있다고 예상 할 수 있습니다. 때로는 새로운 엔티티를 추가하려는 시도가 중복 될 수 있습니다. 업데이트 시도가 잘못된 상태가되는 경우가 있습니다. 이러한 서비스는 NotFoundFault
, DuplicateItemFault
및 InvalidStateFault
을 노출하기로 결정할 수 있습니다.
서비스는 그 내용을 정의하는 데이터 계약 등 세 가지 오류를 정의 할 :
[DataContract]
public class FaultBase {
[DataMember]
public string ErrorMessage {get;set;}
}
[DataContract]
public class NotFoundFault : FaultBase {
[DataMember]
public int EntityId {get;set;}
}
[DataContract]
public class DuplicateItemFault : FaultBase {
[DataMember]
public int EntityId {get;set}
}
[DataContract]
public class InvalidStateFault : FaultBase {
}
그런 다음 특정 작업은 오류를 반환 할 수 있음을 나타냅니다 : 마지막으로
[OperationContract]
[FaultContract(typeof(NotFoundFault))]
public Entity GetEntityById(int id)
을, 당신은 포장 수 DAL에서 WCF가 특정 오류를 대신 반환하는 예외적 인 경우 :
try {
return DAL.GetEntity<Entity>(id);
}
catch (DAL.NoSuchEntityException ex)
{
throw new FaultException<NotFoundFault>(
new NotFoundFault {EntityId = ex.Id, ErrorMessage = "Can't find entity"});
}
테스트 개발자는 다른 AppDomain에 대한 원격 처리를 위해 예외를 serialize하기 위해 특별한 필요가 있다고 생각하게 만들려고했다고 생각합니다. 제공된 .NET 예외 클래스가 모두 serializable이므로 사용자 정의 예외가 올바르게 구현 된 경우에는 해당되지 않습니다. 따라서, 직렬화 기능은 기본 클래스가 이미 직렬화 가능해야하므로 사용자 정의 예외를 생성 할 수 없습니다.
PS. 이 테스트는 "C# 2.0 Fundamentals"이므로 WCF 측면을 고려할 수 없다고 생각합니다. – nightcoder