2009-05-29 5 views
2

J'ai une application Web utilise un proxy pour appeler une opération sur un service WCF qui renvoie des données d'un AS400, comme les différentes régions de vente associées à nos sociétés, les différents magasins que nous avons sur le terrain, etc. Ces régions de vente et magasins ne changent pas souvent, les magasins ne sont ajoutés que deux fois par an et les régions sont les mêmes depuis quelques années.WCF InstanceContextMode

Je suppose que ma confusion réside dans InstanceContextMode. Je retourne juste une liste de "Regions" et "Stores" lorsque le client proxy appelle GetRegions() ou GetStoresForRegion (int regionNumber)

Si je mets le InstanceContextMode en single et que les régions et les magasins sont initialisés et remplis avant tout appel d'opération de service, cela vous aidera-t-il? Fondamentalement en ce moment, il fait une recherche DB sur chaque appel, et je ne pense pas qu'il y ait un besoin. Donc, l'utilisateur se connecte à l'application web -> page de l'application web -> doit charger le menu déroulant des régions -> le développeur web appelle le proxy pour obtenir les régions ... mais cela arrive quand chaque utilisateur utilise l'application web fondamentalement chaque fois qu'un utilisateur accède à l'application Web, le proxy appelle la base de données, je crois que c'est une folie et une erreur dans la façon dont j'ai mis en place le service ou ai-je complètement mal compris quelque chose?

Mise à jour - Le service est hébergé IIS, donc toute cette question est peut-être discutable

Répondre

1

La recommandation des meilleures pratiques de base serait d'utiliser par appel, les services d'instance unique. MAIS: bien sûr, chaque fois que vous appelez le service, une instance de service est créée et le serveur de base de données est interrogé.

Si possible, essayer de s'en tenir à cela. Essayez de mettre la logique de mise en cache dans la base de données - si vous avez assez de RAM, la plupart de vos données fréquemment demandées resteront en mémoire.

Aller à un ConcurrencyMode = multiple dans vos services WCF provoque toutes sortes de problèmes de concurrence auxquels vous devez faire extrêmement attention. Essayez d'éviter cela autant que possible. Essayez par appel, instance unique en premier et optimiser seulement si vous avez vraiment besoin de!

Marc

+1

InstanceContextMode = multiple n'existe pas, je pense que vous voulez dire ConcurrencyMode.Multiple –

+0

@PB: bien sûr - je vais mettre à jour ma réponse - Merci de remarquer! –