У меня есть RESTful-сервис , который я разрабатываю в WCF . Я раскрываю контракт, в котором нет сериализуемых типов, поэтому я использую DataContractSurrogate (реализация IDataContractSurrogate
) для создания суррогатов, которые можно сериализовать с помощью DataContractSerializer
.
У меня вопрос, как я могу получить доступ к заголовкам запросов / ответов в моем классе DataContractSurrogate?
В сервисе это возможно, просто используя WebOperationContext
, а в клиенте тот же WebOperationContext
доступен в пределах OperationContextScope
объект, который может быть создан со ссылкой на текущий канал WCF (IContextChannel
).
Я мог бы создать OperatoinContextScope
, если бы смог получить ссылку на канал WCF в IDataContractSurrogate.GetDeserializedObject
, но я тоже не уверен, как это сделать.
Есть идеи?
@ casperOne
Я хочу получить значение заголовка в реализации DataContractSurrogate, потому что для преобразования из суррогата в целевой тип мне нужно сослаться на запись в единственном пуле фабричных объектов.
Примерно так:
SingletonFactoryPool.Factories[factoryIdFromHeader].CreateTargetType(surrogateValues);
Я уже передаю нужные мне данные в заголовки по другим причинам, похоже, было бы чище, если бы я мог просто прочитать значение из заголовка. Ваша точка зрения верна, хотя, я мог бы легко передать те же данные в суррогатном.