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
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
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