2009-02-09 5 views
1

나는 WCF에서 개발중인 RESTful service입니다. 직렬화 가능 형식이없는 계약을 노출하므로 DataContractSurrogate (구현은 IDataContractSurrogate 임)를 사용하여 DataContractSerializer과 일련 번호를 지정할 수 있습니다.WCF IDataContractSurrogate 구현에서 요청 헤더를 읽을 수 있습니까?

제 질문은 어떻게 DataContractSurrogate 클래스의 요청/응답 헤더에 액세스 할 수 있습니까? 단순히 WebOperationContext를 사용하여 클라이언트에 동일한 WebOperationContext 가능 서비스의

현재 WCF 채널 (IContextChannel)에 대한 참조를 생성 할 수있는 OperationContextScope 객체의 범위 내에서 접근 할 수있다.

IDataContractSurrogate.GetDeserializedObject 내 WCF 채널에 대한 참조를 얻을 수 있다면 OperatoinContextScope을 만들 수 있지만 그 방법도 잘 모르겠습니다.

아이디어가 있으십니까?


@casperOne :
은 내가 팩토리 객체의 단일 풀에서 항목을 참조 할 필요가 목표 유형에 대리로 변환하기 때문에 DataContractSurrogate 구현의 헤더 값을 얻을합니다. 이 같은

뭔가 : 난 그냥 헤더의 값을 읽을 수 있다면 청소기 것처럼 나는 이미 내가 다른 이유로 헤더에 필요한 데이터를 전달하고있어

SingletonFactoryPool.Factories[factoryIdFromHeader].CreateTargetType(surrogateValues); 

, 그것은 보인다. 귀하의 요점은 유효하지만, 나는 쉽게 대리모에서 동일한 데이터를 전달할 수 있습니다.

답변

0

데이터 계약에서 채널에 액세스해야하는 경우 클래스가 잘못 설계되었다고 말할 수 있습니다. 계약서는 자체적으로 포함되어야하며 채널을 통해 메시지를 전달할 때 사용되는 헤더 값에 의존하지 않아야합니다.

여러분은 항상 비 직렬화 된 인스턴스를 취하여 추가해야하는 헤더 정보를 추가하는 확장을 만들 수 있습니다 (이 작업을 수행 할 수있는 영역이 많이 있습니다).

물론 매개 변수를 통해 전달 된 비 직렬화 된 인스턴스와 헤더 정보가 결합 된 별도의 객체를 만들 수 있습니다.

+0

은 IDataContractSurrogate 구현의 헤더에 대한 액세스 권한을 얻으려는 이유에 대한 설명을 추가로 게시했습니다. 댓글에 대한 답변이 오래되었습니다. –

관련 문제