Répondre

1

Oui, vous pouvez sérialiser les exceptions et les renvoyer avec WCF. J'ai écrit une application où il était nécessaire pour le client WCF d'avoir l'exception réelle qui s'est produite sur le serveur; pas seulement une faute de haut niveau.

Voici les étapes à mettre en œuvre ce que nous avons fait:

1 - Déclarer une EncodedException de classe avec une seule propriété de chaîne

public class EncodedException 
{ 
    public string SerializedException {get;set;} 
} 

2 - Sur votre contrat de service ajouter l'attribut pour indiquer que votre service peut renvoyer une exception FaultException.

[ServiceContract()] 
public class MyService 
{ 
    [OperationContract] 
    [FaultContract(typeof(EncodedException), 
        ProtectionLevel = ProtectionLevel.EncryptAndSign)] 
    public string Method1(); 
} 

3 - En vous la mise en œuvre de service ajouter un try/catch dans toutes les opérations de service:

public void Method1() 
{ 
    try 
    { 
     // some code here 
    } 
    catch(Exception ex) 
    { 
     EncodedException encodedException = Helper.SerializeException(ex); 
     throw new FaulException<EncodedException>(); 
    } 
} 

4 - Dans votre code client Intercepter l'exception et le déballer:

public void someMethod() 
{ 
    try 
    { 
     serviceClient.Method1(); 
    } 
    catch(FaulException<EncodedException> ex) 
    { 
     Exception decodedException = Helper.DeserializeException(ex); 
     throw new decodedException(); 
    } 
} 

5 - Ecrire l'assistant pour sérialiser/désérialiser l'exception. Si vous avez besoin d'aide pour cette partie aussi, faites le moi savoir.

J'espère que cela aide.

+0

alors pouvez-vous me dire comment faire cela avec EntLib4.1 – BigOmar

0

Je ne vois pas pourquoi, si vous avez réussi à créer un objet qui peut être sérialisé sur un fichier asmx classique, alors ça ira dans WCF.