Je construis un service web ASP.NET qui sera utilisé en interne dans mon entreprise. La journalisation d'exception et de trace/audit sera effectuée par la classe de service Web ainsi que par les objets métier que le service Web appellera. La consignation est gérée par une instance d'une classe d'aide de journal développée en interne. L'assistant de consignation doit être une instance lors du suivi de l'état et un guide de référence utilisé pour relier les messages de journal en groupes.Comment stocker un objet dans un service Web asp.net afin que les objets métier puissent référencer l'objet?
Dans le passé, nous avons géré cette situation en transmettant des références à l'instance d'aide de journal de classe en classe en utilisant les paramètres de la méthode. J'essaie de trouver un moyen fiable de trouver un moyen de stocker et d'accéder à l'instance tout au long de l'appel sans avoir à le transmettre explicitement.
Je tente de stocker l'instance dans HTTPContext au cours des premières étapes de l'appel de service Web. Lorsque mes objets métier en ont besoin plus tard pendant l'appel, ils y accèdent en tant que propriété d'une classe de base dont tous mes objets héritent.
Initialement, j'ai essayé de stocker l'instance dans Context.Cache du service Web. Cela a semblé fonctionner et mes recherches m'ont amené à croire que le cache serait thread safe. Ce n'est que lorsque j'ai commencé à appeler le service Web à partir de plus de 3 sessions simultanées que l'instance de l'enregistreur était partagée d'appel en appel plutôt que recréée pour chaque appel. J'ai essayé Context.Application et trouvé des résultats très similaires au stockage de cache.
J'ai été capable de trouver ce qui ressemble à une solution utilisable avec Context.Session. Cela m'oblige à utiliser EnableSession = true dans les attributs de chaque méthode mais il semble que l'instance reste unique par appel. Je n'ai pas besoin de suivre les données entre les appels, donc je ne stocke pas de cookies de session dans l'espace client.
La session est-elle le point de stockage optimal pour mes besoins? Cela semble un peu lourd étant donné que je n'ai pas besoin de suivre la session entre les appels. Je suis ouvert aux suggestions ou aux critiques. Je suis sûr que quelqu'un va suggérer d'utiliser la journalisation Trace intégrée ou des systèmes comme Elmah. Ce pourrait être une option pour l'avenir, mais pour l'instant, je n'ai pas le temps de suivre cette voie.
Mise à jour: Je devrais préciser que ce service devra fonctionner sur .Net Framework 2.0. Nous sommes en train de passer à 3.5/4.0 mais notre serveur de production actuel est Win2000 avec un maximum de 2.0.
BTW, le terme "instance d'objet" est redondant. Un objet est une instance d'une classe. –
Merci d'avoir mis à jour la question. "Instance d'un objet" est quelque chose que j'ai grandi en utilisant, mais je ne tenterais jamais d'argumenter comme correct. –