是否可以从WCF IDataContractSurrogate实现中读取请求标头?

是否可以从WCF IDataContractSurrogate实现中读取请求标头?

问题描述:

我有一个RESTful service,我正在开发WCF。我正在公开一个没有可序列化类型的合同,因此我使用DataContractSurrogate(IDataContractSurrogate的实现)创建可以用DataContractSerializer序列化的代理。是否可以从WCF IDataContractSurrogate实现中读取请求标头?

我的问题是,我如何访问我的DataContractSurrogate类中的请求/响应头?

在它通过简单地使用WebOperationContext和客户机中的相同WebOperationContext可能的服务是可以与当前的WCF信道(IContextChannel)的参考被创建的对象OperationContextScope的范围内访问。

我可以创建一个OperatoinContextScope如果我能够在IDataContractSurrogate.GetDeserializedObject之内获得对WCF通道的引用,但我不确定如何做到这一点。

任何想法?


@casperOne
我想在DataContractSurrogate执行标头值,因为从代理转换为目标类型我需要引用在工厂对象的单身库中的条目。

事情是这样的:

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

我已经走过时,我需要在头其他原因的数据,好像它是清洁,如果我可以只读取头中的价值。您的观点是有效的,但我可以轻松地在代理人中传递相同的数据。

如果您需要访问数据合同中的频道,我会说您的班级设计不正确。您的合同应该是自包含的,并且不依赖于通过通道传递消息时使用的标题值。

你总是可以创建一个扩展(有很多领域可以做到这一点),它将采取反序列化的实例,然后添加你需要添加的头信息。

当然,你总是可以创建一个单独的对象,它是反序列化实例(通过参数传递)和标题信息的混合物。

+0

更新了这篇文章,进一步阐明了为什么我试图访问IDataContractSurrogate实现中的头文件。答复是要评论 – 2009-02-09 04:14:41