Я только что прочитал замечательную статью о кэшировании 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