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