Question

J'ai un client lourd .NET Winform Click-Once-déployé qui communique avec trois bases de données, deux bases de données SQL Server et un Oracle.

La première base de données SQL Server, je vais appeler le maître. Je voulais ajouter plus de tables et de colonnes à la base de données principale, mais on m'a dit que je n'aurais pas le droit de le faire, car cela n'était pas négociable. J'ai donc décidé d'ajouter une nouvelle base de données SQL Server, que j'appellerai la base de données Extensions pour stocker des informations supplémentaires que je voudrais placer dans le maître.

N'ayant pas le droit de placer la base de données Extension sur le même serveur que le maître, j'ai créé la base de données Extension sur un autre serveur, ainsi qu'un lien de base de données à partir du serveur de base de données Extension vers le serveur de base de données Master. Cela m'a permis d'effectuer des requêtes couvrant les deux bases de données. J'avais aussi une troisième base de données, une base Oracle, à laquelle je me connectais parfois.

Comme je pensais que la connexion à la base de données Oracle nécessitait l'installation de pilotes Oracle peu susceptibles de se trouver sur le PC de l'utilisateur final, j'ai décidé de demander au client WinForm d'appeler un service Web et ce dernier renverrait les résultats. Par souci de cohérence et parce que mon instinct m’avait dit que les opérations d’accès à la base de données devaient être effectuées à partir d’un seul endroit, j’ai adopté la même approche lorsque le client lourd avait besoin de communiquer avec les bases de données SQL Server, c’est-à-dire qu’ils passaient par un service Web.

Je me demande maintenant si je prends une performance trop importante en appelant d'abord le serveur Web, puis en appelant la base de données au lieu d'ouvrir une connexion sur le PC de l'utilisateur dans le client lourd, puis de se connecter. directement aux bases de données SQL Server. Notez que l'application à laquelle je fais référence est un utilitaire non officiel qui a besoin d'accéder à ces trois bases de données de production, mais n'est pas autorisé à fonctionner en production. Je suppose donc que les tuyaux haute vitesse normaux entre mon serveur Web de développement et la base de données de production ne pas appliquer ici.

Pour obtenir de meilleures performances, mon application Winform doit-elle établir une connexion directement aux bases de données SQL Server? Quels sont les compromis?

Est-il toujours vrai aujourd'hui que des pilotes supplémentaires sont nécessaires pour se connecter à une base de données Oracle ou tout cela est-il dans le framework .NET maintenant et que je pourrais me connecter directement à la base de données Oracle également, si je le voulais?

De plus, j'ai constaté que l'utilisation du serveur de liaison est plus lente que la création de deux connexions à la base de données distinctes et la mise en commun des données. Mes meilleurs résultats ont été obtenus lorsque j'ai lancé deux requêtes a-sync, puis que je les ai combinées comme si elles avaient été renvoyées par une requête utilisant un lien de base de données. Cependant, cela a entraîné des problèmes de maintenance et m'a amené à regretter cette approche lorsque j'ai dû modifier les jointures SQL entre les bases de données.

Était-ce utile?

La solution

Je développe des applications d'entreprise depuis quelques années, ce qui m'a amené à penser que le niveau intermédiaire (les services Web dans votre cas) a toujours du sens et que la connexion à la base de données à partir d'une interface utilisateur est toujours NON pour moi. Je ne pense pas que vous ayez pris une mauvaise décision. À long terme, avoir un niveau intermédiaire a beaucoup de sens. Notez également que le service Web que vous avez créé peut être utilisé par différentes applications.

Autres conseils

Je ne connais pas vos exigences en matière de performances, mais un service Web wcf est rapide. Je ne vois rien de mal à avoir un niveau intermédiaire (votre service Web) pour accéder à la base de données. C'est aussi très sécurisé.

Je pense que si vous avez configuré le serveur Oracle en tant que serveur lié sur votre serveur SQL, vous n'avez pas besoin de pilotes Oracle distincts. Vous pouvez simplement utiliser votre serveur SQL comme source de données.

Essayez de créer des procédures stockées pour obtenir un résultat plus rapide. Si vous utilisez SQL Management Studio, vous pouvez vérifier le plan d'exécution pour optimiser vos procédures stockées (configurer des index).

Je ne pense pas que les services Web soient nécessaires dans ce scénario.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top