Pergunta

Eu estou consumindo um serviço WCF e criou seu procurador utilizando a referência de serviço VS 2008.

Eu estou procurando o melhor padrão de método de serviço WCF chamada

  • Devo criar a instância de proxy do cliente cada vez que eu chamar o método de serviço e fechar o cliente assim que eu sou feito com isso? Quando eu perfilado meu aplicativo cliente, eu podia ver que ele está levando muito tempo para obter o canal ao inicializar o cliente proxy
  • Devo usar um padrão Singleton para o proxy do cliente para que eu possa usar o apenas uma vez instância e livrar-se do re-inicialização sobrecarga? Existe algum problema oculto com esta abordagem?

Eu estou usando .NET Framework 3.5 SP1, ligação basicHttp com pouca personalização.

Foi útil?

Solução

Depende; -)

Se você tem uma seqüência em seu aplicativo que requer várias chamadas após o outro, você poderia ficar com o cliente proxy e manter a usá-lo para fazer mais chamadas. Apesar de ser avisados ??para verificar o estado "falha." - se um erro acontece no servidor, o canal entre o proxy cliente eo servidor pode "falhas" e, assim, o seu proxy do cliente torna-se inutilizável

Além disso - a parte caro é a criação do ChannelFactory<T> - você poderia tentar separar esses dois passos para fora quando você criar o seu proyx cliente em código:

ChannelFactory<IYourService> factory = new ChannelFactory<IYourService>();

Hang on a essa fábrica de canal, por exemplo, cache-lo em algum lugar

O segundo passo deve ser muito menos intensivo em termos de tempo e potência:

IYourService client = factory.CreateChannel();

Você poderia fazer este passo antes de cada chamada (ou seqüência de chamada) e não deve ficar ruim desempenho de que, realmente.

Eu recomendaria fortemente para evitar singletons sempre que possível - é como abrir uma lata de minhocas, não fazê-lo a menos que você absolutamente, positivamente tem que (por exemplo, para gerenciar o acesso a um único recurso que é disponível apenas para um chamador em um tempo).

Marc

Outras dicas

Sorry for levantando uma questão antiga, mas eu queria adicionar este para fácil referência.

Concordo plenamente com marc_s e rally25rs. Então, começar por aí, mas também considerar o uso de um proxy ou invólucro que alças criticado estados. Aqui está uma pergunta sobre SO que discute algumas soluções e aqui é uma outra solução bom me deparei na internet por Corneliu , " Construindo um proxy ClientBase reutilizável ". Sua solução gera wrappers que expõem seus métodos de serviço para conveniência e desempenho máximo. Eu ainda tenho que testar se funciona embora:).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top