Usuário com melhor resposta
Multiplos contratos em apenas um host

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 SnippetServiceHost[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
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 Snippetpublic class Servico : IPessoa, IProduto, IVendedor { }
O teu host pode criar vários endpoints, onde cada endpoint expoe uma interface diferente:Code Snippetusing(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();
}- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:29
-
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.- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:29
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 Snippetpublic class Servico : IPessoa, IProduto, IVendedor { }
O teu host pode criar vários endpoints, onde cada endpoint expoe uma interface diferente:Code Snippetusing(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();
}- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:29
-
-
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.- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 25 de junho de 2010 18:29