2009-02-09 2 views
1

У меня есть 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); 

Я уже пропускания мне данных в заголовках и по другим причинам, похоже, было бы чище, если я мог бы просто прочитать значение из заголовка. Ваша точка действительна, хотя я мог бы легко передать те же данные в суррогате.

ответ

0

Если вам нужен доступ к каналу в контракте с данными, я бы сказал, что ваш класс неправильно спроектирован. Ваш контракт должен быть автономным и не зависит от значений заголовка, используемых при передаче сообщения через канал.

Вы всегда можете создать расширение (есть несколько областей, в которых вы могли бы это сделать), которые будут принимать десериализованный экземпляр, а затем добавить к нему информацию заголовка, которую нужно добавить.

И, конечно же, вы всегда можете создать отдельный объект, который является амальгамой десериализованного экземпляра (прошедшего через параметры) и информацией заголовка.

+0

обновил сообщение с дополнительными разъяснениями относительно того, почему я пытаюсь получить доступ к заголовкам в реализации IDataContractSurrogate. ответ был длинным для комментария –

Смежные вопросы