WCF ChannelFactory кеширование
Я только что прочитал этоотличная статья на WCF ChannelFactory кеширование Вэньлун Донг.
Мой вопрос заключается в том, как вы можете доказать, что ChannelFactory фактически кэшируется между вызовами? Я следовал правилам относительно конструкторов ClientBase. Мы используем следующий перегруженный конструктор для нашего объекта, который наследуется от ClientBase:
ClientBase (строка endpointConfigurationName, EndpointAddress remoteAddress);
В упомянутой статье говорится, что:
Для этих конструкторов все аргументы (включая аргументы по умолчанию) находятся в следующем списке:
· InstanceContext callbackInstance
· Строка endpointConfigurationName
· EndpointAddress remoteAddress
Пока эти три аргумента одинаковы при создании ClientBase, мы можем смело предполагать, что можно использовать один и тот же ChannelFactory. К счастью, типы String и EndpointAddress являются неизменяемыми, то есть мы можем сделать простое сравнение, чтобы определить, являются ли два аргумента одинаковыми. Для InstanceContext мы можем использовать сравнение объектов. Таким образом, тип EndpointTrait используется в качестве ключа кэша MRU.
Чтобы проверить теорию кэширования ChannelFactory, мы проверяем хэш-код в конструкторе ClientBase, например, var testHash = RuntimeHelpers.GetHashCode (base.ChannelFactory);
Хэш-значение отличается между вызовами, что заставляет нас думать, что ChannelFactory на самом деле не кэшируется.
есть идеи?
С уважением
Myles