2009-12-28 5 views
1

Alors quelqu'un (ok c'était moi) n'a pas réalisé que vous devez fermer les proxies WCF après les avoir utilisés.À quel point est-ce grave si je ne ferme pas les proxys WCF/ASMX?

À quel point est-ce grave? Quel genre de problèmes peut-il causer.

Y a-t-il un retard dans la fermeture des ressources à cause de la récupération de place - ou devrais-je vraiment m'inquiéter de choses comme le recyclage prématuré des pools d'applications?

J'ai effectivement beaucoup plus d'ASMX que de proxies WCF avec ce problème - donc la même question vaut pour ASMX aussi.

De toute évidence, maintenant que je le sais, je vais le résoudre graduellement, mais je serais ravi de savoir ce que c'est vraiment?

Répondre

4

Un service WCF a un délai d'expiration par défaut. Si vous ne le fermez pas, le service attendra jusqu'à ce qu'il y ait un timeout.

WCF a également un max appels simultanés, qui a une valeur par défaut de 10.

Par conséquent, si vous ne vous ne pouvez avoir pas fermer vos connexions 10 appels par minute. (En supposant que les paramètres par défaut)

Voici quelqu'un avec un problème similaire:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/d58ee1c6-032b-40f3-b734-6628f3991bb2/

+0

Savez-vous s'il en est de même pour les services ASMX? Heureusement, j'ai découvert très tôt dans mon cycle de vie WCF à ce sujet et peut corriger pour cela. c'est principalement ASMX qui a actuellement ce problème –

+0

@simon le paramètre est un paramètre de configuration WCF, donc je ne pense pas qu'il s'applique à ASMX. –

2

Vous pouvez réutiliser une connexion WCF en toute sécurité, en prenant simplement soin de vérifier si elle est en état d'erreur.

+0

je ne voulais pas dire même la réutilisation - il suffit de créer, d'utiliser et d'abandonner - dans la plupart des cas pour chaque visite d'une page web particulière –

2

En règle générale lorsque vous cherchez progressivement résoudre ce, ne pas envelopper votre mandataire avec une déclaration using, j'ai vu beaucoup de gens le font, je le faisais jusqu'à ce que je lis un article par IDesign cela pourrait provoquer le Dispose à jeter une exception et masquer une exception réelle, fermez explicitement votre proxy dans try/catch, si close provoque une exception, utilisez Abort pour le nettoyage des ressources.

EDIT: Comme indiqué dans le commentaire ci-dessous, cela s'applique aux proxies WCF.

+0

Ceci n'est vrai que pour les proxies WCF. –

+0

@john - vous voulez dire qu'il est correct d'envelopper les proxies ASMX avec une instruction using? –