我们正在尝试使用Web服务(Soap)并使用SvcUtil.exe为架构生成适配器。我们有一个领域
recurrenceCount
除非它有值,否则不应提供,因此我们添加了属性
recurrenceCountSpecified
根据MSDN。即使recurrenceCountSpecified为false,仍会在传出xml中指定字段recurrenceCount属性。
我们做错了什么?
适配器代码:
[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);
}
修改后的类是:
[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 :(得分:2)
如果您正在使用MessageContract,则您尝试使用的行为(xxxSpecified属性)不适用。它仅适用于XmlSerializer。您已正确指定应将XmlSerializer用于操作。但是,因为您还指定要使用MessageContracts,所以XmlSerializer只在下一级序列化时启动 - 即在序列化每个消息成员时。