Usuário com melhor resposta
Publicar dois servicos no mesmo Host?

Pergunta
-
Ola pessoal, tenho uma duvida que gostaria de esclarecer.
É possivel eu publicar dosi serviços no mesmo endereco de Host. por exemplo
strEndereco = "net.tcp://192.168.10.45:3060"
_Host1 = new ServiceHost(typeof(_Servico1), new Uri[] { new Uri(strEndereco) });
_Host2 = new ServiceHost(typeof(_Servico2), new Uri[] { new Uri(strEndereco) });
veja que o endereço é o mesmo,
Isso é óssível?
Tentei fazer isto e deu alguns erro, então queria saber se devo insistir nisso por que vou ter muitos contratos e a classes _Servico1 e _Servico2 teram muitos contratos então queria dividir isto, na verdade eu queria dividir em varios host. Teria uma outra saida?
Respostas
-
É isso mesmo, o Israel tá certíssimo.. A porta pode ser a mesma, porem cada um tem seu servicehost..
ServiceHost serviceAHost = new ServiceHost( serviceAServiceType , new Uri[] { new Uri( strEndereco + @"/Servico1" ) } ); ServiceHost serviceBHost = new ServiceHost( serviceBServiceType , new Uri[] { new Uri( strEndereco + @"/Servico2" ) } );
Falow
Se a resposta foi útil, não esqueça de marcá-la. _________________________________________________________ "Nada é tão ruim que não possa piorar" diz o filósofo....."Tava funcionando lá em casa..." diz o programador.- Marcado como Resposta marcio.chiaveli quarta-feira, 4 de novembro de 2009 11:20
Todas as Respostas
-
Caro Marcio,
Você pode fazer desta forma:
http://blogs.msdn.com/dkaufman/archive/2008/06/13/hosting-multiple-service-implementation-on-the-same-port-with-wcf.aspx
Att.
Vinicius de Sá
Se a resposta foi útil, não esqueça de marcá-la. _________________________________________________________ "Nada é tão ruim que não possa piorar" diz o filósofo....."Tava funcionando lá em casa..." diz o programador. -
Ola ssanoRanhose,
Eu peguei o codigo de onde voce sugeriu e fiz algumas mudanças pois uso o protocolo net.tcp e o exemplo esta usando http veja como ficou:
string strEndereco = Protocolo + "://" + EnderecoIp + ":" + Porta.ToString();
Type serviceAServiceType = typeof(_Servico1);
Type serviceAContractType = typeof(IServico1);
Type serviceBServiceType = typeof(_Servico2);
Type serviceBContractType = typeof(IServico2);
ServiceHost serviceAHost = new ServiceHost(serviceAServiceType, new Uri[] { new Uri(strEndereco) });
ServiceHost serviceBHost = new ServiceHost(serviceBServiceType, new Uri[] { new Uri(strEndereco) });
serviceAHost.Description.Behaviors.Add(new ServiceMetadataBehavior());
serviceAHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
serviceBHost.Description.Behaviors.Add(new ServiceMetadataBehavior());
serviceBHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
serviceAHost.AddServiceEndpoint(serviceAContractType, new NetTcpBinding(),strEndereco + "/Servico1");
serviceBHost.AddServiceEndpoint(serviceBContractType, new NetTcpBinding(),strEndereco + "/Servico2");
serviceAHost.Open();
serviceBHost.Open();
mas ele me da a seguinte mensagem quando tento executar os hosts:
O ChannelDispatcher em 'net.tcp://192.168.10.116:4050/mex'
com contrato(s) "'IMetadataExchange'" não consegue abrir sua IChannelListener
Onde estou errando?
-
Boas Marcio,
Para cada serviço você precisará ter um ServiceHost exclusivo. Sendo assim, você tem que criar, de forma independente, cada um dos serviços.
http://www.israelaece.com -
É isso mesmo, o Israel tá certíssimo.. A porta pode ser a mesma, porem cada um tem seu servicehost..
ServiceHost serviceAHost = new ServiceHost( serviceAServiceType , new Uri[] { new Uri( strEndereco + @"/Servico1" ) } ); ServiceHost serviceBHost = new ServiceHost( serviceBServiceType , new Uri[] { new Uri( strEndereco + @"/Servico2" ) } );
Falow
Se a resposta foi útil, não esqueça de marcá-la. _________________________________________________________ "Nada é tão ruim que não possa piorar" diz o filósofo....."Tava funcionando lá em casa..." diz o programador.- Marcado como Resposta marcio.chiaveli quarta-feira, 4 de novembro de 2009 11:20
-