2010-10-25 8 views
1

Nous essayons de trouver un moyen de modifier le comportement du service WCF pour intercepter toutes les exceptions et au lieu de retourner les erreurs au client, il remplira un objet de retour personnalisé avec exception données et le retour. Jusqu'à présent, nous n'avons pas eu beaucoup de chance. J'ai trouvé cet exemple: Catching custom faultsWCF - Récupérer les fautes sur le serveur et renvoyer les types personnalisés à la place

Cependant, il ne retourne pas les types personnalisés comme nous le souhaiterions. Quelles autres options y a-t-il?

Merci!

+0

Qu'entendez-vous par "objet de retour personnalisé"? – Nix

Répondre

0

Si vous voulez avoir une interopérabilité et « par la norme "service, vous devriez toujours retourner FaultException<T> erreurs SOAP de votre service au client.

Comme ce type prend un <T> générique, vous pouvez mettre n'importe quoi dans ce type là pour signaler vos erreurs. Ce type doit être décoré avec un [DataContract] et ses membres doivent être renvoyés avec les attributs [DataMember].

[DataContract] 
public class MyErrorInfo 
{ 
    [DataMember] 
    public int ErrorCode { get; set; } 

    [DataMember] 
    public string ErrorMessage { get; set; } 
} 

Lorsque vous attrapez ces execptions sur le côté service et retourner un FaultException<MyErrorInfo> (ou tout ce que vous finirez par appeler votre classe d'erreur), vous devez également décorer vos opérations avec un

[FaultContract(typeof(MyErrorInfo))] 
[OperationContract] 
public SomeType SomeMethodCall(SomeType parameter); 

afin que vos clients puissent attraper le FaultException<MyErrorInfo> et le gérer.

0

J'ai écrit un blog post on this exact topic après l'avoir rencontré dans notre propre projet. Fondamentalement, nous avons choisi de renvoyer le même type d'objet afin que nous puissions attacher un seul délégué à tous les événements à globally handle certain errors (comme si un utilisateur perdait les permissions sur une organisation)

Je n'avais pas pensé à utiliser FaultException examinez comment nous pourrions faire cela. Ce concept était WCF Service (.NET 3.5) exécuté dans SharePoint 2007 et consommé par Silverlight 4.

Questions connexes