none
Multiplos contratos em apenas um host RRS feed

  • Pergunta

  • Pessoal,

     

    Imagine os contratos: IPessoa, IProduto, IVendedor, IPedido....

     

    Como hospedar todos estes contratos em apenas um HOST? Hoje estou fazendo para efeito de testes da seguinte forma:

     

    Code Snippet

    ServiceHost[4] host = new ServiceHost[4];

     

    host[0] = new ServiceHost(typeof(PessoaBL));

    host[1] = new ServiceHost(typeof(ProdutoBL));

    host[2] = new ServiceHost(typeof(VendedorBL));

    host[3] = new ServiceHost(typeof(PedidoBL));

     

    host[0].AddServiceEndpoint("IPessoa", new WSHttpBinding(), "http://localhost:50000/pessoabl");

    host[1].AddServiceEndpoint("IProduto", new WSHttpBinding(), "http://localhost:50000/produtobl");

    host[2].AddServiceEndpoint("IVendedor", new WSHttpBinding(), "http://localhost:50000/vendedorbl");

    host[3].AddServiceEndpoint("IPedido", new WSHttpBinding(), "http://localhost:50000/pedidobl");

     

    host[0].Open();

    host[1].Open();

    host[2].Open();

    host[3].Open();

     

     

    Na internet encontro apenas exemplos de como expor apenas um contrato, mas em sistemas reais, terei diversos contratos, como devo publica-los?

     

    Artigos, links, referências, dicas?

     

    Rogério Bassete

    sexta-feira, 20 de junho de 2008 19:50

Respostas

  • Ola Rogerio,

    O que você pode fazer é ter mesmo um único host servindo todas as requisições. Imagine que você tenha uma classe que implemente todas as interfaces, exemplo:

    Code Snippet
    public class Servico : IPessoa, IProduto, IVendedor {  }

     

     


    O teu host pode criar vários endpoints, onde cada endpoint expoe uma interface diferente:

    Code Snippet
    using(ServiceHost host = new ServiceHost(typeof(Servico), baseAddresses))
    {
        host.AddServiceEndpoint(typeof(IPessoa), new BasicHttpBinding(), "pessoa");
        host.AddServiceEndpoint(typeof(IProduto), new BasicHttpBinding(), "produto");
        host.AddServiceEndpoint(typeof(IVendedor), new BasicHttpBinding(), "vendedor");

        host.Open();
        Console.ReadLine();
    }

     

     

    domingo, 22 de junho de 2008 18:03
    Moderador
  • Ola Rogerio,

    O ServiceHost pode apenas expor uma classe por vez. Sendo assim, você tem duas opções:

    1 - Criar um ServiceHost para cada classe;
    2 - Criar uma classe que será exposta para o ServiceHost e esta classe servir de wrapper para o seu objeto mais complexo.

    terça-feira, 24 de junho de 2008 12:02
    Moderador

Todas as Respostas

  • Ola Rogerio,

    O que você pode fazer é ter mesmo um único host servindo todas as requisições. Imagine que você tenha uma classe que implemente todas as interfaces, exemplo:

    Code Snippet
    public class Servico : IPessoa, IProduto, IVendedor {  }

     

     


    O teu host pode criar vários endpoints, onde cada endpoint expoe uma interface diferente:

    Code Snippet
    using(ServiceHost host = new ServiceHost(typeof(Servico), baseAddresses))
    {
        host.AddServiceEndpoint(typeof(IPessoa), new BasicHttpBinding(), "pessoa");
        host.AddServiceEndpoint(typeof(IProduto), new BasicHttpBinding(), "produto");
        host.AddServiceEndpoint(typeof(IVendedor), new BasicHttpBinding(), "vendedor");

        host.Open();
        Console.ReadLine();
    }

     

     

    domingo, 22 de junho de 2008 18:03
    Moderador
  • Israel,

    Respondendo sobre "
    Imagine que você tenha uma classe que implemente todas as interfaces?". Não! Cada interface está implementada em uma classe com nome semelhante.

    Rogério


    terça-feira, 24 de junho de 2008 11:32
  • Ola Rogerio,

    O ServiceHost pode apenas expor uma classe por vez. Sendo assim, você tem duas opções:

    1 - Criar um ServiceHost para cada classe;
    2 - Criar uma classe que será exposta para o ServiceHost e esta classe servir de wrapper para o seu objeto mais complexo.

    terça-feira, 24 de junho de 2008 12:02
    Moderador