2012-07-13 3 views
2

WCF 서비스에서 사용자 정의 IErrorHandler이 있습니다. 위대한 작품과 나는 많은 것들을 로깅 오류로 고정. 해당 메시지는 클라이언트에서 제대로 오지 않았다 알려줍니다직렬화 예외가 발생하면 WCF 서비스의 메시지에 액세스

Unexpected end of file. Following elements are not closed: Source, item, root. 

There was an error deserializing the object of type System.Collections.Generic.List`1[[My.Web.Services.Dto.Log, My.Web.Services.Dto, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. Unexpected end of file. Following elements are not clo 

: 내가 갖는 마지막 오류가 직렬화 예외입니다. 어떤 메시지인지 알 수있는 방법이 있습니까? 내 IErrorHandler에서 HTTP 게시 매개 변수에 액세스 할 수 있습니까?

답변

0

WCF MessageInspector (IDispatchMessageInspector)을 사용하면 메시지를 deserialize하기 전에 메시지에 액세스 할 수있게됩니다. 연결된 예제의 AfterReceiveRequest 메서드를 참조하십시오. Ian Picknell의 길이가 더 길어졌습니다 post 자세한 내용은

+0

모든 메시지를 기록하지 않고 예외를 유발 한 메시지 만 기록하려면 어떻게해야합니까? 어떻게/어디서 메시지 본문을 저장하여 나중에 'IErrorHandler'에서 액세스 할 수 있습니까? – cremor

1

IErrorHandler은 응답 메시지가 직렬화가 이루어지는 채널 젤 스택에 전달되기 전에 호출됩니다. 따라서 직렬화에 문제가 발생하면 사용자 정의 오류 처리기가 호출되지 않습니다. 가장 좋은 방법은 tracing을 사용하여 메시지를 기록하고 검사하는 것입니다.

+0

추적은 실용적이지 않습니다. 수천 가지 요청으로 하루 1-2 회를 얻을 수 있습니다. 또한 메시지는 클라이언트의 POST가 아니라 응답입니다. 전에 IErrorHandler에서이 예외를 어떻게 보았습니까? – katit

+0

IErrorHandler는 서버 쪽만 적용합니다. 파일이나 다른 것을 읽는 커스텀 시리얼 라이저가 있습니까? –

+0

이것은 WCF REST 서비스입니다. 클라이언트 POST 및 GET 다른 메시지. 오류는 분명히 내 개체 중 하나를 serialize하기 때문에 발생합니다. 개체 이름을 보면 POST 중에 오류가 있음을 알 수 있습니다. 따라서 기본 제공 .NET 직렬 변환기가 실패했습니다. 메시지가 무엇인지보고 싶습니다. – katit

관련 문제