2010-06-07 5 views
0

J'ai une bibliothèque assez importante de services Web construits en .NET que j'utilise comme modèle de données pour les sites Web de notre entreprise. Dans la plupart des applications .NET, j'utilise le fichier ASAX global pour le profilage, la journalisation et la création de rapports de bogues pour toutes les exceptions lancées par l'application.Stratégies pour la gestion des erreurs dans les services Web .NET

Global ASAX n'étant pas disponible pour les services Web, je suis curieux de savoir quelles autres stratégies ont été mises au point pour contourner cette limitation. Actuellement je fais juste quelque chose le long de ces lignes:

<WebMethod()> _ 
Public Function MyServiceMethod(ByVal code As Integer) As String 
    Try 
     Return processCode(code) 
    Catch ex As Exception 
     CustomExHandler(ex) 'call a custom function every time to log exceptions 
     Return errorObject 
    End Try 
End Function 

Quelqu'un a une meilleure façon de faire les choses en plus d'appeler une fonction à l'intérieur du piège?

+0

Envisagez de passer à WCF, qui a une [solution orientée aspect intégrée] (http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iservicebehavior.aspx) pour ce type du problème. – ladenedge

Répondre

1

En supposant que vous ne pouvez pas prendre l'avis de ladenedge, http://msdn.microsoft.com/en-us/library/ds492xtk(VS.71).aspx suggère qu'il n'y a pas moyen d'utiliser la gestion des erreurs qui vous laisser coincé avec votre méthode actuelle:

« Une application Web peut être composé de plusieurs Services Web XML, mais l'événement Application_Error du fichier Global.asax ne peut pas être utilisé pour la gestion des exceptions globales Le HttpHandler pour les services Web XML consomme toute exception qui se produit pendant l'exécution d'un service Web XML et le transforme en erreur SOAP avant L'événement Application_Error est appelé. "

Même si vous disposez d'une tonne de fonctions, vous envoyez au moins les exceptions à un emplacement commun au lieu d'utiliser la programmation copier-coller. Il semble que votre méthode puisse s'adapter au principe DRY. En d'autres termes, vous allez bien!