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