none
Publicar dois servicos no mesmo Host? RRS feed

  • 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?
    terça-feira, 3 de novembro de 2009 12:16

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
    terça-feira, 3 de novembro de 2009 23:09

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.
    terça-feira, 3 de novembro de 2009 12:55
  • 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?

    terça-feira, 3 de novembro de 2009 17:50
  • 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
    terça-feira, 3 de novembro de 2009 18:04
    Moderador
  • É 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
    terça-feira, 3 de novembro de 2009 23:09
  • Ok pessoal, agora entendi. Obrigado
    quarta-feira, 4 de novembro de 2009 11:21