2010-09-22 2 views
0

Мне нужно реализовать пользовательское кэширование клиентского прокси-сервера службы wcf. Я реализовал интерфейс IOperationBehavior. На стороне сервера мы можем установить свойство OperationDescription.Invoke в методе ApplyDispatchBehavior и реализовать интерфейс IOperationInvoker для управления выполнением операции. На стороне клиента мы не можем этого сделать.Как реализовать пользовательское кэширование wcf на стороне клиента

На стороне клиента мы можем использовать интерфейсы IClientMessageInspector, IParameterInspector, IClientMessageFormatter для управления потоком сообщений. Основная проблема заключается в том, что я должен хранить в кеше только ответ службы без информации о формате сообщения. Когда я восстанавливаю значения из кеша, я должен снова создать сообщение, как в случае ответа службы. Я не могу нарушить внутреннюю обработку сообщений. Поэтому в тот момент я теряю необходимую информацию о таких сообщениях, как кодирование, content-type (json, xml) в случае служб RESTful. Конечный результат - WCF не может обработать такое сообщение. Я хочу отключить обработку сообщений, если существует кешированное значение. Как я могу это сделать?

ответ

0

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

+0

Спасибо, я также рассмотрел реализацию прокси-класса WCF. Мой клиент-прокси-класс, установленный из ClientBase ~ 1. Этот класс использует RealProxy, который выполняет вызов метода HandleResponseMessage. Этот метод выдает exeption, когда я использую фальшивое сообщение. Итак, мой вопрос: как вы завершаете прокси WCF? –

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