2012-04-24 2 views
0

여기에 이와 비슷한 질문이 있지만 특별히 동일하지는 않습니다.서버의 WCF 요청에 대한 요청 및 응답 값 로깅

클라이언트에서 API 키를 사용하여 쿼리 할 수있는 WCF 공용 API가 있습니다. 따라서 다음과 같이됩니다 :

string GetDataForRegion(string apiKey, int regionId); 

이 요청을 클라이언트에 다시 전송 된 데이터와 함께 기록 할 수 있어야합니다. IDispatchMessageInspector을 사용하여 응답을 얻을 수 있지만 요청 매개 변수를 얻을 수있는 곳을 볼 수 없습니다.

나는 IParameterInspector을 사용하여 이것이 가능하다는 것을 알 수 있습니다 만, 요청을 연결하고 함께 응답하려면 어떻게해야합니까?

이상적으로, 내가 (A DB)에 로그에 다음처럼 작성할 수 꿔 :

날짜 시간, apiKey에, MethhodCalled, 매개 변수, 응답

SP, 위의 샘플을 사용하여, 그것은 것 :

2012-04-24-15-52-11, myapikey, GetDataForRegion {regionId 1} [응답 데이터]

가능한 이것이 이내 WCF가 내장 된 것입니까?

감사합니다,

K

+0

당신은 그냥이에 대한 추적을 WCF를 사용할 수, 또는 기록의 일부 사용자 지정 양식을해야합니까? –

+0

추적을 살펴 보았지만 출력을 쉽게보고 쿼리 할 수있는 형식으로 변환해야합니다. 그래서 아마 데이터베이스에 쓸 필요가있을 것입니다. 추적 로그를 데이터베이스로 파싱하는 것은 "그럴 필요가 없기를 바랍니다"라는 솔루션 목록에 있습니다. –

답변

3

IParameterInspector 당신이 원하는합니다. 서버 측에서는 사용자 코드가 호출되기 전에 BeforeCall 메서드가 호출되며이 메서드에서 상태 값을 반환 할 수 있습니다 (일반적으로 Guid이 될 수 있지만 아무 것도 될 수 있습니다). 일단 서비스가 실행되고 생성되면 반환 값 AfterCallBeforeCall과 동일한 상태 값으로 호출됩니다. 클라이언트 측에서는 서버 왕복 전후에 호출이 발생한다는 점을 제외하면 기본적으로 동일한 방식으로 작동합니다.

귀하의 경우 정보를 단계별로 기록하는 것이 가장 쉽습니다. 인바운드 호출 중에 요청 데이터를 데이터베이스에 삽입하고 호출에서 고유 식별자 (ID 필드, 타임 스탬프 등)를 반환하십시오. 돌아 오는 길에 일치하는 레코드를 응답 데이터로 업데이트하십시오. 이렇게하면 통화 시간 및 통화가 반환되지 않은 경우를 빠르게 볼 수 있습니다. 여기

코드와 방법이 작업에 대한 간단한 소개입니다 :

http://blogs.msdn.com/b/endpoint/archive/2011/04/28/wcf-extensibility-iparameterinspector.aspx

당신은 또한 같은 목적 IDispatchMessageInspector을 사용할 수 있으며, 기본적으로 동일한 방식으로 작동합니다,하지만 당신은 떨어져 눈물해야 자신개체; 아마도 매개 변수 검사기가 훨씬 더 좋은 선택 일 것입니다. 메시지 관리자는보다 강력하고 "더 간단한"옵션이있는 경우에도 더 일반적으로 사용되는 것 같습니다. 참조 :

http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx

+0

가장 좋은 방법 같아 보입니다. 나는 비슷한 것을보고 IDispatchMessageInspector에서 응답을 채우지 만 데이터 만 가져 오면 문제가 발생했습니다 (설정은 고통이 될 것입니다). IParameterInspector에서 데이터를 사용할 수 있다는 것을 깨닫지 못해 많은 시간을 절약 할 수 있습니다. 감사! –