2011-09-26 6 views
1

Nous essayons de consommer un service Web (Soap) et ont généré un adaptateur pour le schéma en utilisant SvcUtil.exe. Nous avons un champXmlSerializer avec motif spécifié ne fonctionne pas

recurrenceCount

qui ne doit pas être fourni à moins qu'il ait une valeur et nous avons donc ajouté une propriété

recurrenceCountSpecified

comme selon MSDN. Même si recurrenceCountSpecified est false, la propriété champ recurrenceCount est toujours spécifiée dans le fichier xml sortant.

Que faisons-nous de mal?

Code Adaptateur:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel","3.0.0.0")] [System.ServiceModel.ServiceContractAttribute(Namespace="http://sas.elluminate.com/", ConfigurationName ="SASDefaultAdapterV2Port")] 
public interface SASDefaultAdapterV2Port 
{ 
    [System.ServiceModel.OperationContractAttribute(Action="http://sas.elluminate.com/setSession",ReplyAction = "*")]  
    [System.ServiceModel.FaultContractAttribute(typeof(sas.elluminate.com.ErrorResponse), Action = "http://sas.elluminate.com/setSession", Name="ErrorResponse")] 
    [System.ServiceModel.XmlSerializerFormatAttribute()] 
    sessionResponseCollection setSession(setSessionRequest request); 
} 

La classe est modifiée:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel","3.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(WrapperName="setSession", WrapperNamespace = "http://sas.elluminate.com/",IsWrapped = true)] 
public partial class setSessionRequest 
{ 

    [System.Xml.Serialization.XmlIgnoreAttribute()]  
    public bool recurrenceCountSpecified; 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://sas.elluminate.com/", Order = 19)] 
    public int recurrenceCount; 

} 
+0

Voir aussi la question: http://stackoverflow.com/questions/1009895/svcutil-exe-proxy-generated-not-allowing-for-nullable-fields – dwarring

Répondre

2

Le comportement que vous essayez d'utiliser (propriétés xxxSpecified) ne s'applique pas si vous utilisez un MessageContract. Cela s'applique uniquement à XmlSerializer. Vous avez correctement spécifié que XmlSerializer doit être utilisé pour l'opération. Toutefois, étant donné que vous avez également spécifié que les objets MessageContracts doivent être utilisés, XmlSerializer ne prend en charge que le niveau de sérialisation suivant, c'est-à-dire lors de la sérialisation de chaque membre du message.

Questions connexes