2010-07-14 5 views
2

J'ai défini un schéma personnalisé pour une faute de savon qui ressemble à ceci: ... ...personnalisée défaut SOAP a mal namespace http://schemas.datacontract.org/2004/07/

J'ai Code genereated dans VS 2008:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.zurich.com/zsoa/corporate/common/2008/08/fault")] 
[System.Xml.Serialization.XmlRootAttribute("zsoaFault", Namespace="http://schemas.zurich.com/zsoa/corporate/common/2008/08/fault", IsNullable=false)] 
public partial class ZSOAFault : AbstractFault 
{ 

...

J'ai développé une coutume IErrorHandler (partie d'un cadre envoyé à tous les projets) qui génère ce défaut de savon personnalisé comme ceci:

Schemas.ZSOAFault.ZSOAFault zfault = new Schemas.ZSOAFault.ZSOAFault(); 
zfault.message = "hello"; 
zfault.operation = "operation"; 
zfault.serviceContext = "serviceContext"; 
zfault.serviceEndpoint = "serviceEndpoint"; 
zfault.timeStamp = DateTime.Now; 

FaultException<Schemas.ZSOAFault.ZSOAFault> fe = new FaultException<Schemas.ZSOAFault.ZSOAFault>(zfault);   
MessageFault msgFault = fe.CreateMessageFault(); 

Il est important que la Schemas.ZSOAFault.ZSOAFault de classe a été générée à partir du schéma et non du wsdl d'application qui importe le même schéma aussi.

Mais quand je regarde ce retourné faute de savon, je vois un autre espace de noms:

 <detail> 
     <ZSOAFault xmlns="http://schemas.datacontract.org/2004/07/Schemas.ZSOAFault" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <message>hello</message> 
      <exception i:nil="true"/> 
      <operation>operation</operation> 
      <serviceContext>serviceContext</serviceContext> 
      <serviceEndpoint>serviceEndpoint</serviceEndpoint> 
      <timeStamp>2010-07-14T14:31:58.5437649+02:00</timeStamp> 
     </ZSOAFault> 
    </detail> 

Je pensais voir mon espace de nom de la définition de défaut personnalisé dans le schéma ou je me trompe?

Merci Oliver

Répondre

2

Je crois me souvenir que des défauts personnalisés dans WCF doivent être des contrats de données, et ne jamais utiliser XmlSerializer, donc les sérialiseur Xml attributs que vous utilisez seront ignorés. Au lieu de cela, utilisez l'attribut [DataContract]:

[DataContract(Name="zsoaFault", Namespace="http://schemas.zurich.com/zsoa/corporate/common/2008/08/fault")] 
public partial class ZSOAFault : AbstractFault { 
.... 
} 
+0

J'ai ajouté l'attribut DataContract à ZSOAFault. Maintenant l'espace de noms de l'élément zsoaFault est correct mais l'élément de message a de nouveau l'espace de noms généré (le message est hérité de AbstractFault). J'ai également essayé d'ajouter l'attribut DataContract à AbstractFault, puis aucun élément de message n'est renvoyé. Dois-je supprimer tous les attributs System.Xml.Serialization? – user391548

+0

J'ai trouvé le problème. AbstractFault n'a pas défini le membre de message en tant que [DataMember]. Ça fonctionne maintenant. Merci pour l'aide. – user391548