WCF ChannelFactory кеширование - PullRequest
       17

WCF ChannelFactory кеширование

4 голосов
/ 21 января 2010

Я только что прочитал замечательную статью о кэшировании WCF ChannelFactory от Wenlong Dong.

Мой вопрос заключается в том, как вы можете доказать, что ChannelFactory фактически кэшируется между вызовами? Я следовал правилам относительно конструкторов ClientBase. Мы используем следующий перегруженный конструктор для нашего объекта, который наследуется от ClientBase:

ClientBase (строка endpointConfigurationName, EndpointAddress remoteAddress);

В упомянутой статье говорится, что:

Для этих конструкторов все аргументы (в том числе по умолчанию) находятся в следующий список:

· InstanceContext callbackInstance

· строка endpointConfigurationName

· EndpointAddress remoteAddress

Пока эти три аргумента то же самое, когда ClientBase построено, мы можем смело предположить, что тот же ChannelFactory может быть использован. К счастью, Строка и Типы EndpointAddress являются неизменяемыми, мы можем сделать простое сравнение с определить, являются ли два аргумента тот же самый. Для InstanceContext мы можем используйте Сравнение объектов. тип EndpointTrait при этом используется в качестве ключа кеша MRU.

Чтобы проверить теорию кеша ChannelFactory, мы проверяем хэш-код в конструкторе ClientBase, например, var testHash = RuntimeHelpers.GetHashCode (base.ChannelFactory);

Хеш-значение отличается между вызовами, что заставляет нас думать, что ChannelFactory на самом деле не кэшируется.

Есть мысли?

Привет

Myles

Ответы [ 2 ]

1 голос
/ 19 февраля 2014

Я знаю, что вопрос устарел, но ответа нет, и если у кого-то такая же проблема:

Из статьи, которую вы упомянули:

Прежде чем внутренний канал (прозрачный прокси) ClientBase будет созданная логика кэширования для текущей ClientBase может быть отключен, если другие открытые свойства (такие как ChannelFactory, Endpoint, и ClientCredentials).

Это означает, что вызов ChannelFactory.GetHashCode() против экземпляра ClientBase<IService> фактически приводит к отключению кэша.

0 голосов
/ 26 августа 2010

У меня тоже была проблема с этим, я получаю очень высокую производительность, когда я сохраняю объект прокси для нескольких вызовов.

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

Как и вы, я следовал рекомендациям Microsoft, в том числе перенес свою конфигурацию привязки из кода в файл .config (что я не хотел делать).

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

...