2015-11-26 5 views
3

J'ai un service de workflow. J'utilise également la persistance du workflow dans ce service. Mais après avoir déployé le flux de travail dans IIS, à partir du client, je fais une demande au service de workflow, dans le fichier journal sur le serveur. Je vois un messageComment réparer 'System.ServiceModel.Channels.ReceivedFault' ne peut pas être sérialisé

The execution of the InstancePersistenceCommand named {urn:schemas-microsoft-com:System.Activities.Persistence/command}SaveWorkflow was interrupted by an error.InnerException Message: Type 'System.ServiceModel.Channels.ReceivedFault' cannot be serialized. 
Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. 
If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types. 

J'ai essayé de rechercher cette exception, mais je n'ai rien trouvé.

Comment résoudre ce problème? ou laissez-moi savoir quelle est la raison de l'exception ci-dessus?

+0

Avez-vous essayé ce que le message d'erreur suggéré? – Tim

+0

chaque méthode de service dans le service de workflow, j'ai essayé d'attraper, mais je n'ai rien obtenu de cela. –

+0

Vous voyez, l'un de vos types expose une propriété de type 'System.ServiceModel.Channels.ReceivedFault', qui ne peut pas être sérialisée car la classe n'est pas marquée avec l'attribut DataContractAttribute, elle ne peut donc pas être sérialisée. Donc marquez cette propriété comme ignorée. – Will

Répondre

4

System.ServiceModel.Channels.ReceivedFault est un non-sérialisable classe interne le framework .NET, donc, malheureusement, il n'y a rien que vous pouvez faire pour corriger la cause réelle (à savoir la fabrication ladite classe sérialisable).

Vous appelez probablement un service externe par l'intermédiaire de WCF dont les erreurs sont signalées, à savoir System.ServiceModel.FaultException. IIRC, quelque part au fond de cet objet FaultException est une référence au coupable, une instance ReceivedFault.

Solution: Intercepter tous FaultExceptions, transférer les informations que vous devez savoir de la FaultException dans une exception sérialisable et jeter ce dernier:

try 
{ 
    CallService(); 
} 
catch (FaultException ex) 
{ 
    // Gather all info you need from the FaultException 
    // and transport it in a serializable exception type. 
    // I'm just using Exception and the message as an example. 
    throw new Exception(ex.Message); 
}