Pergunta

Eu tenho um .NET Winform Click-Once-implantado cliente gordura que fala com três bancos de dados, 2 bancos de dados SQL Server e uma Oracle.

O primeiro banco de dados SQL Server, eu vou chamar o Mestre. Eu queria adicionar mais tabelas e colunas no banco de dados mestre, mas me disseram que eu não seria dado direitos para fazê-lo, que era inegociável. Então, eu decidi adicionar um novo banco de dados SQL Server, que chamarei de banco de dados as extensões para armazenar informações adicionais que gostaria de lugar no Master.

Desde que eu não tinha direitos para colocar o banco de dados de extensão no mesmo servidor como o Mestre, eu criei o db Extensão em outro servidor e criou um link db a partir do servidor de banco de dados de extensão de servidor de banco de dados do Mestre. Isso me permitiu realizar consultas que se estendeu os dois bancos de dados. Eu também tive um terceiro banco de dados, um Oracle um, que eu iria ocasionalmente conectar.

Porque eu pensei que a conexão com o banco de dados Oracle requer instalação de drivers da Oracle não é provável que seja no PC do usuário final, eu decidi ter a chamada do cliente WinForm um serviço web eo serviço web iria retornar os resultados. Pelo amor consistência e porque meu instinto me disse que as operações de acesso a banco de dados deve ser realizada a partir de um só lugar, tomei a mesma abordagem quando o cliente gordura precisava falar com os bancos de dados SQL Server, ou seja, eles passaram por um serviço de web.

Agora estou questionando se estou tomando muito grande de um acerto de desempenho pela primeira ter que chamar o servidor web e, em seguida, ter a chamada servidor web banco de dados em vez de abrir uma conexão no PC do usuário no cliente de gordura e conexão diretamente para os bancos de dados SQL Server. Note-se que o aplicativo que eu estou me referindo é um utilitário não-oficial que precisa de acesso a estes três bancos de dados de produção, mas não é permitido para realmente executar na produção, então eu suspeito que os tubos normais de alta velocidade entre o meu servidor web desenvolvimento e banco de dados de produção não se aplicam aqui.

Para melhores performances, deve o meu Winform aplicativo ser estabelecer uma conexão diretamente para os bancos de dados do SQL Server? Quais são as vantagens e desvantagens?

É ainda verdade que hoje drivers adicionais são necessidade de se conectar a um banco de dados Oracle ou é tudo isso no framework .NET agora e eu poderia ligar diretamente para até mesmo o banco de dados Oracle, também, se eu queria?

Além disso, descobri que usando o servidor da ligação é mais lenta do que a criação de duas conexões db separados e reunindo os dados em conjunto. Meus melhores resultados vieram quando iniciei duas consultas a-sincronização e então combinados os dados juntos, como se ele foi devolvido por uma consulta usando um link db. No entanto, isso leva a problemas de manutenção e levou-me a lamentar esta abordagem quando eu precisava para modificar o do SQL junta entre bancos de dados.

Foi útil?

Solução

Eu tenho sido no desenvolvimento de aplicações corporativas para dois anos e que me fez pensar que camada intermediária (serviços web no seu caso) sempre faz sentido e se conectar a DB a partir de uma interface do usuário diretamente é sempre um NÃO para mim. Eu não acho que você fez uma decisão errada. No longo prazo, ter uma camada intermediária faz muito sentido. Observe também que, o serviço web que você construiu pode ser utilizado por diferentes aplicações.

Outras dicas

Eu não sei os requisitos de desempenho, mas um serviço web WCF é rápido. Não vejo nada de errado em ter uma camada intermediária (o serviço web) para acesso de banco de dados. É também muito seguro.

Eu acho que se você tiver configurado o servidor Oracle como um servidor vinculado no seu servidor SQL você não precisa separar os motoristas Oracle. Você pode apenas usar o seu servidor SQL como fonte de dados.

Tente criar procedimentos armazenados para obter resultado mais rápido. Se você usar o estúdio de gerenciamento do SQL você pode verificar o plano de execução para otimizar seus procedimentos armazenados (índices Configurar).

Eu não acho que Webservices são necessários neste cenário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top