2010-06-01 10 views
0

J'ai un WebMethod qui reçoit les types de paramètres suivants:service web gestion des exceptions

[WebMethod] 
User(long userid,int number) 

Lorsque le client envoie paramètre avec différents types de je veux, je dois prendre cette erreur et écrire à la base de données, etc.

Par exemple ArgumentExceptions ...

Comment puis-je résoudre ce problème?

Merci.

+1

Comment est-il possible d'appeler une méthode sur un Webservice sans donner les bons paramètres? – KroaX

+1

@KroaX c'est possible. Alors que la plupart des appels à un webservice seront vérifiés au moment de la compilation, cela ne s'applique pas, par exemple, à un client javascript accédant au service. – TimothyP

+0

Voulez-vous l'attraper sur le serveur ou sur le client? –

Répondre

1

Avez-vous essayé ce qui se passe quand un client utilise les mauvais types?

Je m'attendrais à ce que la bibliothèque SOAP piège cela et déclenche une exception. Dans votre propre méthode, vous ne pouvez vérifier que les valeurs des paramètres entrants. Et cela fonctionne comme dans une méthode normale (non-web).

+0

c'est exactement ce que je veux dire.Je ne pourrais pas trouver des méthodes de manipulation dans les extensions SOAP. – Jack

0

Vous pouvez utiliser l'approche suivante:

Chaque méthode Web retourne toujours une sorte de WebMethodResult.

Par exemple

[WebMethod] 
public WebMethodResult DoSomethng(guid p_userId) 
{ 

IfMethodIsSuccessful() 
{ 
    WebMethodResultSuccess successResult = new WebMethod(); 
    // Add required information into web method result object 

    return successResult; 
} 
else 
{ 
    WebMethodResultFailure failedResult = new WebMethodResultFailure(); 
    return failedResult; 
} 

} 

idée ici est que chaque fois que la méthode Web est appelée, elle retourne une sorte d'objet.

Dans ce cas, WebMethodResult sera la classe parent et l'échec WebMethodResultSuccess et WebMethodResult héritera de la classe parente. Au lieu de IsMethodIsSuccessfull, vous pouvez ajouter votre propre logique, placer tout dans un bloc try catch et renvoyer les résultats de réussite/échec. Au lieu de IsMethodIsSuccessfull.

Si vous appelez les méthodes Web à partir du script java ou de jquery, l'exception ne sera pas renvoyée au client à moins que vous n'utilisiez SOAP ou une sorte d'alternative. En renvoyant des objets personnalisés, vous pouvez les lire via javascrip/jquery et afficher le message approprié à l'utilisateur.

Espérons que cela a du sens.

0

En termes de journalisation, vous devriez probablement écrire une couche de gestion d'exception générique ou regarder dans des alternatives open source.

Vous allez intercepter une exception spécifique et la passer à la couche de gestion des exceptions. Dans cette couche (dll) vous allez enregistrer l'exception dans la base de données ou écrire dans un fichier plat. DB est probablement une meilleure option puisque les données peuvent être facilement analysées. Une autre alternative est de se connecter au journal des événements de Windows, mais personnellement, je n'aime pas cela parce qu'il n'est pas facile de produire des statistiques sur les exceptions et je pense qu'il a une limite de taille.