2009-05-09 2 views
-1

최근에 나는 브레인 벤치에서 테스트를 받았고 나쁜 결과 (4.5, 석사 학위와 같은 것)를 얻지 못했습니다. 나는 한 가지 질문에 대해서만 답을 알지 못했다. (나머지는 확실했다. 적어도 나는 정확한 답을 안다.). 질문은 다음과 같습니다.사용자 정의 예외를 만드는 이유는 무엇입니까?

다음 중 맞춤 예외를 생성하지 않는 이유는 무엇입니까?

선택 1
나중에 검사 강한 라벨을 삽입 할
선택 2
특정 예외의 목적을 강하게 타입에
선택 3
원격 직렬화 있도록
선택 4
에 예외가 생성 될 때 일반적인 단계를 처리하십시오.
선택 5
사용자 지정 데이터 전파에 대한 사용자 지정 속성을 추가하려면

"4"라고 대답했습니다 - 예외가 생성 될 때 일반적인 단계를 처리합니다. 어느 것이 옳다고 생각합니까?

+0

PS. 이 테스트는 "C# 2.0 Fundamentals"이므로 WCF 측면을 고려할 수 없다고 생각합니다. – nightcoder

답변

4

선택 사항 3. 기본 예외가 이미 원격을 지원하거나 다른 방법을 사용하면 remoting이 추가되지 않습니다.


"예외"라는 주석의 주석은 다음과 같습니다. 테스트 작성자가 염두에 두었던 것이 아닌 것 같습니다 :

WCF 서비스에서 처리되지 않은 예외가 서비스 밖으로 전파되도록 허용 할 수 있습니다. WCF는 구성에 따라 처리되지 않은 예외의 세부 사항을 포함하거나 포함하지 않을 수있는 SOAP 오류로 변환합니다.

특정 예외 집합을 인식하고 고의적으로 SOAP 오류로 변환하는 것이 더 낫습니다. 예를 들어 데이터베이스 엔티티에서 작동하는 서비스는 엔티티가 발견되지 않을 수도 있다고 예상 할 수 있습니다. 때로는 새로운 엔티티를 추가하려는 시도가 중복 될 수 있습니다. 업데이트 시도가 잘못된 상태가되는 경우가 있습니다. 이러한 서비스는 NotFoundFault, DuplicateItemFaultInvalidStateFault을 노출하기로 결정할 수 있습니다.

서비스는 그 내용을 정의하는 데이터 계약 등 세 가지 오류를 정의 할 :

[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이므로 사용자 정의 예외가 올바르게 구현 된 경우에는 해당되지 않습니다. 따라서, 직렬화 기능은 기본 클래스가 이미 직렬화 가능해야하므로 사용자 정의 예외를 생성 할 수 없습니다.

+0

예, 아마도 질문을 작성하기 전에 그것에 대해 생각했습니다. – nightcoder

+0

나도 3 표에 찬답합니다! 다른 모든 것들이 사용자 정의 예외를 만드는 이유입니다. –

+0

Re 3 - .NET "remoting"에서는 true 일 수 있지만 WCF 3에서는 * 예외가 "fault"(특별한 클래스의 예외). –

1

저는 실제로 4가 틀린 것으로 동의합니다 : 예외가 생성 될 때 일반적인 단계를 처리합니다.

예외가 생성 될 때 "단계"를 실행하지 않아도되지만 현재 클래스 (및 모듈)가 주소 지정 방법을 모르는 예외적 인 상황이 시스템에 생성되었음을 시스템에 알립니다.

함수의 적절한 실행을 위해 공통 단계를 실행해야하는 경우 해당 기능을 예외로 분리하지 않고 코드 자체에 포함해야합니다.

+0

그걸 살께. –

+0

정리 작업을 "예외가 생성되는 일반적인 단계"로 생각하고 문자 그대로 "작성한"내용을 고려하지 않으면 의미가있을 수 있습니다. Brainbench 테스트는 때때로 오도 된 문구를 가지고 있습니다 ... –

0

WCF 서비스를 사용하는 동안 우리는 serialization에 대한 사용자 지정 예외를 만들어야했습니다. 그래서 3은 정답이 될 수 없습니다.

+0

추신. 이 테스트는 "C# 2.0 Fundamentals"이므로 WCF 측면을 고려할 수 없다고 생각합니다. – nightcoder

+0

Ok ... 웹 서비스에도 동일하게 적용됩니다. –

관련 문제