none
Como consumir Serviço Wcf via COM? RRS feed

  • Pergunta

  • Caros colegas!
    Estou aquí às voltas com uma questão que não sei a solução.
    Como consumir um serviço usando WCF via DLL (COM).
    Quando instacio a dll, não consigo alcançar o serviço, pois vem a seguinte mensagem:

    "Could not find default endpoint element that reference contract ...
    ...because no configuration file is found or ..."

    A dll foi desenvolvida no VS2010 (v4.0) com a referencia gerando o arquivo
    "app.config".
    A mesma solução com um cliente executável roda bem.
    Como posso fazer para que a dll reconheça o arquivo config?
    Grato - Marco

    segunda-feira, 22 de março de 2010 11:30

Respostas

Todas as Respostas

  • Boas Marco,

    Pode dar maiores informações sobre "WCF via DLL (COM)", pois não compreendi muito bem o cenário.


    http://www.israelaece.com
    • Marcado como Resposta Marco Mazzarino domingo, 28 de março de 2010 11:24
    segunda-feira, 22 de março de 2010 12:39
    Moderador
  • Caro Israel

    A questão me pareceu simples, mas a implementação está difícil.

    A dll é o cliente, um assembly gerenciavel (.Net)

    A chamada ao serviço é feita pela Dll e não o programa aplicativo.

    Por que isso? a dll pode ser instanciada por programas desktops não gerenciados, por exemplo VB ou Vfp, para obter serviços do servidor. No lado do servidor tem o caminho inverso, ou seja, a mensagem é recebida e entregue a um interop.vfp.dll (por exemplo), que  a recebe, processa e a devolve pelo proxy. A dll cliente recebe o resultado e o disponibiliza para o programa aplicativo não gerenciado.

    Já tenho este modelo implantado em asmx. É perfeito e rápido. Não conseguí ainda implanta-lo com o Wcf.

    Será que este esquema não funciona no Wcf?

    Abraço, Marco

    segunda-feira, 22 de março de 2010 22:49
  • Boas Marco,

    Crie o arquivo de configuração com todas as configurações do serviço WCF.

    Depois disso, tente nomear o arquivo da seguinte forma: TuaAplicacaoVBOuVFP.exe.config


    http://www.israelaece.com
    terça-feira, 23 de março de 2010 11:16
    Moderador
  • Caro Israel!
    Obrigado pela sua atenção.
    Depois de buscar algumas soluções alternativas, concluí que:

    Uma Dll não acessa o config para o Wcf - isto justifica o porque de quando se chamar a dll via um programa executável (gerenciado) ela funciona, pois as configurações estão no arquivo app.config deste programa -  conforme você mesmo sugeriu.

    Como estou chamando a Dll pelo programa desktop gerenciado (no caso o Vfp), não consigo associar o config com o Wcf - isto explica a mensagem.
    A solução foi construir a Dll configurando o EndPoint no seu próprio código.
    Para se conseguir a flexibilidade do config foi necessário emulá-lo. Algo parecido com isto:
          
    string result = null;
    string url = "
    http://domain/vfpservice.svc" - obter isto de um arquivo .ini ou registro da máquina cliente.
    EndpointAddress EP = new EndPointAddress(url);
    BasicHttpBinding SB = new BasicHttpBinding();
    ...
    configurações complementares aquí ...
    VfpServiceProxy.VfpServiceClient oVfp = new VfpServiceProxy.VfpServiceClient(SB,EP);
    result = oVfp.GetInfo(...);
    return result;

    No aplicativo desktop (por exemplo Vfp):
    ox=CREATEOBJECT("wcfwc.wcdbroll")
    ? ox.GetInfo(...)

    Menos mal, não é mesmo?
    Um abraço
    Marco
     

    domingo, 28 de março de 2010 11:24
  • Boas Marco,

    Sim, DLLs não acessam arquivos de configuração diretamente.


    http://www.israelaece.com
    domingo, 28 de março de 2010 14:03
    Moderador