ti-enxame.com

Criar cliente WCF sem proxy gerado automaticamente

olhando para

WCF ChannelFactory vs proxy de geração

parece que a melhor prática na criação de um cliente WCF é criar um proxy (não gerado automaticamente).

Estou procurando online há algum tempo e não encontrei nenhum exemplo completo (classe Proxy, web.config)

Você poderia fornecer um exemplo ou links para recursos?

21
GigaPr

Este artigo é exatamente sobre o que você está perguntando, acredito:

WCF o Caminho Manual ... O Caminho Certo

Tendo compartilhado isso, criar seus proxies manualmente nem sempre é o melhor uso possível do seu tempo. O artigo aborda alguns grandes motivos para isso - você certamente terá mais controle, seus clientes podem ter um tempo mais fácil etc. etc., no geral, fazer coisas manualmente como essa exigirá mais do seu tempo e explicará aos usuários do seu serviço exatamente como usar o proxy que você fornece pode ser uma dor.

Há uma razão pela qual o WCF permite a troca e descoberta de metadados e o VS cria automaticamente proxies para você.

De qualquer forma, é um artigo interessante e uma técnica que vale a pena aprender.

19
Tad Donaghe

É assim que eu faço.

Obter contratos de serviço e contratos de dados

Se eu tiver acesso ao código de serviço, tenho todos os contratos. Caso contrário, posso usar svcutil ou Adicionar referência de serviço para gerá-los.

Criar configuração

Eu uso Adicionar referência de serviço apenas para obter o arquivo app.config. Eu apago tudo o que gera. Edite o app.config conforme necessário.

Definir fábrica

Digamos que eu tenha um contrato de serviço IFooService:

interface IFooServiceChannel : IFooService, IClientChannel { }

É literalmente isso. Nenhum membro.

Criar fábrica

fooServiceFactory = new ChannelFactory<IFooServiceChannel>(
                        "NetTcpBinding_IFooService");

A cadeia "NetTcpBinding_IFooService" é o atributo name do elemento binding no app.config.

Criar canal

fooService = fooServiceFactory.CreateChannel();

se-o

fooService.DoSomething();

A parte mais complicada é acertar o app.config. Você precisa aprender sobre ligações e pontos de extremidade . É um pouco de uma curva de aprendizado, mas nada drástico.

11
Igby Largeman

Aqui estão os passos básicos.

  1. Crie seu serviço normalmente.
  2. Mova a interface que seu serviço implementa para um Assembly que possa ser compartilhado com o cliente.
  3. Crie um ChannelFactory em que T é sua interface. Você terá que fornecer o URI do seu serviço ao construtor.
  4. Ligue para factory.CreateChannel (). Este será o tipo T.
  5. Use o canal para fazer chamadas.

É realmente assim tão simples. Nenhum código gerado automaticamente, nenhuma referência de serviço. Fica um pouco mais complicado com chamadas assíncronas e Silverlight, mas não muito.

8
cadrell0