2010-05-19 1 views
6

IErrorHandler를 사용하여 WCF에서 예외 처리를 수행하고 있으며 스택 추적 및 예외를 발생시킨 사용자와 함께 예외를 기록하려고합니다.HandleError 또는 ProvideFault 안에 IErrorHandler가있는 WCF의 예외 로깅?

OperationContext.Current.IncomingMessageProperties.Security.ServiceSecurityContext.PrimaryIdentity

...하지만 이것은 단지 ProvideFault 내부에서 작동하는 것 같다 : 나는 예외를 발생시킨 사용자를 얻을 볼 수 있습니다

유일한 방법은 , HandleError 내부에는 없습니다. HandleError 내부에서 사용자를 얻는 방법이 있습니까? 그게 배경 스레드에서 호출 및 오류 로깅, 오른쪽 의미로 ProvideFault 대신 HandleError를 사용하고 싶습니다?

답변

3

IErrorHandler의 두 가지 방법 가 아주 잘 정의 책임 :

  • 는 handleError 모든 캐치되지 않는 예외를 처리하기 위해 여기 - 그것은 당신의 로깅을 할 수있는 최적의 장소입니다 그 이유는 - 그것은 정말 그 모든 이유 ProvideFault이 상호 운용 가능한 SOAP 오류로 .NET 예외를 돌려 역할을 수행합니다

  • 할 수 - 또는 alltogether

  • 를 예외를 무시

물론 ProvideFault 방법으로 로그인하는 것을 기술적으로 막을 수는 없습니다. 내가 찾지 않으면 기능을 찾지 않을 것입니다. 나는 최소한의 놀라움의 원칙을 따르기를 좋아하는 경향이있다. 만약 그 방법이 ProvideFault이라면 나는 단지 FaultException<T>을 제공 할 것으로 기대한다. 다른 것들도 많이하지 않는다.

는이 코드 조각 사용하여 서비스의 보안 컨텍스트에 대한 액세스를 얻으려면 : 나는 동의

ServiceSecurityContext secCtx = ServiceSecurityContext.Current; 

if(secCtx.PrimaryIdentity != null) 
{ 
    // do something with primary identity 
} 
+0

을,하지만 어떻게 하나가는 handleError 메소드 내부에서 사용자 정보 (ServiceSecurityContext.PrimaryIdentity)을 얻을 수 있습니까? – Dannerbo

+0

@Dannerbo : 내 대답 업데이트 –

+8

내 환경에서 HandleError()의 ServiceSecurityContext.Current에 액세스하는 중 "Message is closed"텍스트가있는 ObjectDisposedException이 발생합니다. – UserControl