none
Wrapper de uma base de dados com WCF RRS feed

  • Pergunta

  • Olá pessoal...

    Para eu fazer wrapper de uma base de dados com WCF puro (sem ADO.NET Data Service):

    1º É correto criar um serviço para cada tabela? E um programa com 30 tabelas eu criaria 30 serviços?

    2º Como ficaria a relação desses serviços com o Host? Seria um host pra cada serviço ou posso por todos serviços no mesmo host?

    3º Se desta forma (cada serviço representando uma tabela) for correto, não seria estranho 30 serviços numa mesma aplicação?


    Alexander
    terça-feira, 14 de dezembro de 2010 10:32

Respostas

  • Boas Alexander,

    2 - Sim, para cada serviço você precisará de um host ou um arquivo *.svc se estiver hospedando no IIS.

    Ao criar um wrapper, você pode determinar como quer configurar. Você pode ter um serviço para cada tabela, ou um único serviço expondo tudo, lembrando que cada tabela precisará, de no mínimo, 4 operações (CRUD).

    Além disso, outra preocupação que você deverá ter é a permitir ao cliente definir qual será o critério de consulta, pois em um momento ele quer os clientes de São Paulo, em outro, quer aqueles que estão inativos, etc. Como os serviços tem um contrato, você precisará se antecipar para conseguir cercar todas as infinitas possibilidades.

    Outro detalhe importante é com relação aos relacionamentos. Se você retorna os pedidos, como retornar os itens do pedido? Além disso, quando você receber um pedido, não basta você adicionar somente o pedido, mas precisará também se preocupar em também adicionar os registros que correspondem aos itens.

    Para facilitar isso, você poderia optar por trabalhar com contratos mais flexíveis, como Message Contracts ou até mesmo recebendo e retornando a instância da classe Message, criando toda a infraestrutura genérica para processar cada mensagem e transformá-las em queries na base de dadoos, ou seja, refazer o WCF Data Services.

    • Marcado como Resposta Alexander Leão terça-feira, 14 de dezembro de 2010 12:47
    terça-feira, 14 de dezembro de 2010 10:42
    Moderador
  • Boas Alexander,

    1 - Sim, você pode ter um único Windows Service para todos os serviços WCF. Dentro deste Windows Services, cada serviço deverá ter sua instância de ServiceHost exclusiva, para gerenciar a execução daquele serviço. Lembre-se de colocar todos os serviços dentro do mesmo Windows Service, não te dará a flexibilidade de parar um serviço enquanto outros continuem rodando.

    2 - Sim, você pode utilizar o WCF Data Services com classes normais. Basta criar um Data Provider customizado ou utilizar o Reflection Data Provider: http://msdn.microsoft.com/en-us/library/dd728281.aspx
    http://www.israelaece.com
    • Marcado como Resposta Alexander Leão terça-feira, 14 de dezembro de 2010 12:48
    terça-feira, 14 de dezembro de 2010 12:30
    Moderador

Todas as Respostas

  • Boas Alexander,

    2 - Sim, para cada serviço você precisará de um host ou um arquivo *.svc se estiver hospedando no IIS.

    Ao criar um wrapper, você pode determinar como quer configurar. Você pode ter um serviço para cada tabela, ou um único serviço expondo tudo, lembrando que cada tabela precisará, de no mínimo, 4 operações (CRUD).

    Além disso, outra preocupação que você deverá ter é a permitir ao cliente definir qual será o critério de consulta, pois em um momento ele quer os clientes de São Paulo, em outro, quer aqueles que estão inativos, etc. Como os serviços tem um contrato, você precisará se antecipar para conseguir cercar todas as infinitas possibilidades.

    Outro detalhe importante é com relação aos relacionamentos. Se você retorna os pedidos, como retornar os itens do pedido? Além disso, quando você receber um pedido, não basta você adicionar somente o pedido, mas precisará também se preocupar em também adicionar os registros que correspondem aos itens.

    Para facilitar isso, você poderia optar por trabalhar com contratos mais flexíveis, como Message Contracts ou até mesmo recebendo e retornando a instância da classe Message, criando toda a infraestrutura genérica para processar cada mensagem e transformá-las em queries na base de dadoos, ou seja, refazer o WCF Data Services.

    • Marcado como Resposta Alexander Leão terça-feira, 14 de dezembro de 2010 12:47
    terça-feira, 14 de dezembro de 2010 10:42
    Moderador
  • Blz Israel...

    OK, pelo que vejo não tem como escapar do WCF Data Service, mas primeiro deixa eu terminar de entender quanto ao host neste cenário rsrsr.

    1º Neste exemplo tenho 30 serviços (representando 30 tabelas) se meu host for um Windows Service posso por os 30 serviços neste único Windows Service ou preciso de um Windows Service para cada serviço?

    2º Com o WCF Data Services sou obrigado a trabalhar com Entity Framework ou LINQ, ou posso trabalhar como se estivesse trabalhando com ADO.NET? Vc pode nos passar uma referencia? Obrigado.


    Alexander
    terça-feira, 14 de dezembro de 2010 11:57
  • Boas Alexander,

    1 - Sim, você pode ter um único Windows Service para todos os serviços WCF. Dentro deste Windows Services, cada serviço deverá ter sua instância de ServiceHost exclusiva, para gerenciar a execução daquele serviço. Lembre-se de colocar todos os serviços dentro do mesmo Windows Service, não te dará a flexibilidade de parar um serviço enquanto outros continuem rodando.

    2 - Sim, você pode utilizar o WCF Data Services com classes normais. Basta criar um Data Provider customizado ou utilizar o Reflection Data Provider: http://msdn.microsoft.com/en-us/library/dd728281.aspx
    http://www.israelaece.com
    • Marcado como Resposta Alexander Leão terça-feira, 14 de dezembro de 2010 12:48
    terça-feira, 14 de dezembro de 2010 12:30
    Moderador
  • Blz Israel...

    Fica aqui uma sugestão. Você poderia escrever um livro sobre estes detalhes do WCF pois aqui no brasil a tecnologia WCF ainda é para poucos (olha que já tem alguns anos que ela existe), existe poucos que falam sobre WCF e foruns quase não existe, inte...


    Alexander
    terça-feira, 14 de dezembro de 2010 13:03
  • Boas Alexander,

    É, justamente por isso que tento publicar algumas coisas no meu blog para compartilhar e tentar popularizar a tecnologia.
    http://www.israelaece.com
    terça-feira, 14 de dezembro de 2010 13:05
    Moderador
  • Blz Israel...

    Vc já pensou em fazer com WCF o que vc fez com "Por dentro da Base Class Library"? Sei que vc já fez grande coisa disponibilizando aqueles videos, mas tipo um segundo passo um pouco mais avançado?

    É facil falar né, eu fico aqui só falando, mas eu mesmo não tenho conhecimento pra isso. rsrsrsrs.


    Alexander
    terça-feira, 14 de dezembro de 2010 13:29
  • Boas Alexander,

    Se elencar todos os artigos de WCF que escrevi, acho que já dá mais ou menos aquele da BCL. Quando eu tiver um tempo eu relaciono aquilo em um único post.
    http://www.israelaece.com
    terça-feira, 14 de dezembro de 2010 13:31
    Moderador