2010-12-12 54 views
0

J'ai un service web asp.net simple, pour surveiller et gérer environ 10 ordinateurs, avec 4 webMethods et toutes ces méthodes sont assez simples. En général, ils ressemblent à: (1) faire des connexions WMI à certaines machines, (2) faire une tâche simple, (3) retour résultat.Services Web Asp.net et comment réutiliser une connexion WMI ou DB?

Le problème est que les connexions WMI aux ordinateurs distants prennent environ 15 secondes et que j'ai besoin d'appeler successivement 2 ou 3 méthodes pour la même machine. D'après ce que je sais, il y a une nouvelle instance de ma classe de service (classe publique MonSvr: System.Web.Services.WebService) créée à chaque appel de webMethod.

  • Alors, comment puis-je partager la connexion WMI ou DB toutes les instances de Situés entre mon service que je pourrais réutiliser cette connexion?

  • Quand il y a tous les appels multiples à webMethods de mon service, fait alors chaque instance de service web fonctionne dans thread séparé?

Répondre

0

Vous pouvez créer un Dictionary statique contenant le nom de la machine distante et la connexion WMI. Cela pourrait ensuite être partagé entre différents appels. Vous pouvez avoir des problèmes avec plusieurs threads en utilisant les classes WMI à la fois, alors assurez-vous de vérifier que tous les appels sont thread safe. Voulez-vous économiser le coût de la création d'un objet?

+0

Comment puis-je créer une connexion au démarrage du service, avant l'appel de webMethods? – Primoz

+0

Il est préférable de le créer la première fois qu'il est demandé à chaque appel. Alors le premier est lent, mais les autres sont rapides. – cjk

0

Si c'est le cas, pourquoi ne pas utiliser le motif Singleton? et pour Singleton multithread vous pouvez vérifier http://msdn.microsoft.com/en-us/library/ff650316.aspx

+0

Dans mon cas singelton est OK pour l'accès DB car il n'y a qu'un seul DB. Mais je ne connais pas les connexions WMI à plusieurs ordinateurs. – Primoz