Cache do WCF ChannelFactory
Acabei de ler issoótimo artigo no cache do ChannelFactory do WCF por Wenlong Dong.
Minha pergunta é simplesmente como você pode realmente provar que o ChannelFactory está de fato sendo armazenado em cache entre as chamadas? Eu segui as regras relacionadas aos construtores da ClientBase. Estamos usando o seguinte construtor sobrecarregado em nosso objeto que herda de ClientBase:
ClientBase (string endpointConfigurationName, EndpointAddress remoteAddress);
No artigo mencionado acima, afirma-se que:
Para esses construtores, todos os argumentos (incluindo os padrão) estão na seguinte lista:
· InstanceContext callbackInstance
· String endpointConfigurationName
· EndpointAddress remoteAddress
Desde que esses três argumentos sejam os mesmos quando o ClientBase for construído, podemos assumir com segurança que o mesmo ChannelFactory pode ser usado. Felizmente, os tipos String e EndpointAddress são imutáveis, ou seja, podemos fazer uma comparação simples para determinar se dois argumentos são iguais. Para InstanceContext, podemos usar a comparação de referência de objeto. O tipo EndpointTrait é, portanto, usado como a chave do cache MRU.
Para testar a teoria do cache ChannelFactory, estamos verificando o Hashcode no construtor ClientBase, por exemplo. var testHash = RuntimeHelpers.GetHashCode (base.ChannelFactory);
O valor do hash é diferente entre as chamadas, o que nos faz pensar que o ChannelFactory não é realmente armazenado em cache.
Alguma ideia?
Saudações
Myles