Можно ли прочитать заголовки запроса из реализации WCF IDataContractSurrogate? - PullRequest
1 голос
/ 09 февраля 2009

У меня есть RESTful-сервис , который я разрабатываю в WCF . Я раскрываю контракт, в котором нет сериализуемых типов, поэтому я использую DataContractSurrogate (реализация IDataContractSurrogate) для создания суррогатов, которые можно сериализовать с помощью DataContractSerializer.

У меня вопрос, как я могу получить доступ к заголовкам запросов / ответов в моем классе DataContractSurrogate?

В сервисе это возможно, просто используя WebOperationContext, а в клиенте тот же WebOperationContext доступен в пределах OperationContextScope объект, который может быть создан со ссылкой на текущий канал WCF (IContextChannel).

Я мог бы создать OperatoinContextScope, если бы смог получить ссылку на канал WCF в IDataContractSurrogate.GetDeserializedObject, но я тоже не уверен, как это сделать.

Есть идеи?


@ casperOne
Я хочу получить значение заголовка в реализации DataContractSurrogate, потому что для преобразования из суррогата в целевой тип мне нужно сослаться на запись в единственном пуле фабричных объектов.

Примерно так:

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

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

1 Ответ

0 голосов
/ 09 февраля 2009

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

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

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

...