MessageBodyMember 命名空间覆盖 WSDL 中的 DataContract 命名空间
Posted
技术标签:
【中文标题】MessageBodyMember 命名空间覆盖 WSDL 中的 DataContract 命名空间【英文标题】:MessageBodyMember namespace overrides DataContract namespace in WSDL 【发布时间】:2021-06-27 17:38:56 【问题描述】:我有以下消息合同:
[MessageContract(IsWrapped = false)]
public class fooResponse
[MessageBodyMember(Namespace = "http://www.demo.com/serviceSchemaTypes-v1.4/")]
public commonReturnType fooResponse1 get; set;
commonReturnType
是下面的DataContract
:
[DataContract(Namespace = "http://www.demo.com/serviceSchema-v1.4/")]
public class commonReturnType
[DataMember]
public returnCode returnCode get; set;
[DataMember]
public string errorMessage get; set;
生成的 WSDL 文件将 commonReturnType
的命名空间覆盖为 public commonReturnType fooResponse1 get; set;
的命名空间。将生成的 WSDL 文件导入另一个项目后,commonReturnType
看起来像这样:
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Tools.ServiceModel.Svcutil", "2.0.2")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.demo.com/serviceSchemaTypes-v1.4/")]
public partial class commonReturnType
在这里,命名空间应该是http://www.demo.com/serviceSchema-v1.4/
。为什么这里的命名空间发生了变化,我该如何解决这个问题?
【问题讨论】:
【参考方案1】:你报错的原因可能是你设置了这个属性:
IsWrapped = false
可以参考官方文档:Using Message Contracts进行修改。
【讨论】:
以上是关于MessageBodyMember 命名空间覆盖 WSDL 中的 DataContract 命名空间的主要内容,如果未能解决你的问题,请参考以下文章