Usuário com melhor resposta
Como consumir Serviço Wcf via COM?

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
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
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
-
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
-
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- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 23 de março de 2010 12:08
-
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
-