WCF消息协定命名空间的问题

我有以下MessageContract

[MessageContract(IsWrapped = true, WrapperName = AuthorizationXmlElementNames.ElementNames.GetUserRightsResponse, WrapperNamespace = AuthorizationXmlElementNames.Namespace)] public class GetUserRightsResponseMessage { #region Properties /// <summary> /// Gets or sets GetUserRightsResponse. /// </summary> [MessageBodyMember(Namespace = AuthorizationXmlElementNames.Namespace)] public GetUserRightsResponse GetUserRightsResponse { get; set; } /// <summary> /// Gets or sets ResponseHeader. /// </summary> [MessageHeader( Name = XmlCoreElementNames.ElementNames.ResponseHeader, Namespace = XmlCoreElementNames.Namespace, ProtectionLevel = ProtectionLevel.None)] public ResponseHeader ResponseHeader { get; set; } #endregion }

GetUserRightsResponse类看起来是这样的

[XmlRoot(ElementName = AuthorizationXmlElementNames.ElementNames.GetUserRightsResponse, Namespace = AuthorizationXmlElementNames.Namespace, IsNullable = false)] [Serializable] //[MessageContract(WrapperName = AuthorizationXmlElementNames.ElementNames.GetUserRightsResponse, WrapperNamespace = AuthorizationXmlElementNames.Namespace)] public class GetUserRightsResponse { #region Constructors and Destructors /// <summary> /// Initializes a new instance of the <see cref="GetUserRightsResponse"/> class. /// Initialize a new instance of the <see cref="GetUserRightsResponse"/> class. /// </summary> public GetUserRightsResponse() { this.UserServiceAccesses = new UserServiceAccesses(); } #endregion #region Properties /// <summary> /// Gets or sets the user rights for the current user. /// </summary> //[MessageBodyMember(Namespace = AuthorizationXmlElementNames.Namespace)] public UserServiceAccesses UserServiceAccesses { get; set; } #endregion }

XmlCoreElementNames.Namespace是命名空间中的常量字符串,它的值是urn:MyNamespace:Authorization

我返回的实例GetUserRightsResponseMessage从我的经营合同。 但是,我总是得到错误的命名空间为GetUserRightsResponse包含在返回的对象实例。 返回的XML部分看起来像下面这样。

<s:Body u:Id="_0"> <GetUserRightsResponse xmlns="urn:MyNamespace:Authorization"> <GetUserRightsResponse i:nil="true" xmlns:a="http://schemas.datacontract.org/2004/07/MyMessageContract.MessageContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" /> </GetUserRightsResponse> </s:Body>

为什么我总是得到命名空间xmlns:a="http://schemas.datacontract.org/2004/07在返回的对象的财产是什么? xmlns:a意思吗?

--------------解决方案-------------

这两个GetUserRightsResponse元素在命名空间"urn:MyNamespace:Authorization" ,因为外一个默认命名空间声明是由内层继承。

xmlns:a="http://schemas.datacontract.org/2004/07/MyMessageContract.MessageContracts"是实际上没有在邮件中使用的名称空间声明它定义了一个命名空间前缀(“A”)。 因此它具有在XML消息的意义完全没有效果,并且可以被删去。 它的存在是微软实现,也许您的留言包装元素名称和数据合同名称的命名冲突引发的(但我只是猜测这个)的怪癖。

如果你的客户是完全符合XML规范,这不应该是你在所有问题。 然而,也有一些不符合标准的SOAP客户端工具集周围是挑剔的名称空间声明的治疗。 如果你很倒霉,你可能会发现你有一个是由一个未使用的命名空间前缀声明混淆。

你没有得到错误的命名空间,据我所看到的。

所有的元素都设置为"urn:MyNamespace:Authorization"这是我想象的是AuthorizationXmlElementNames.Namespace

xmlns:a="http://schemas.datacontract.org/2004/07/MyMessageContract.MessageContracts"指向微软的架构信息的合同。 现在,这似乎并没有在你们公布的片断被使用过,所以我很惊讶它的存在在所有但这是一个无辜的命名空间,因为你没有该命名空间中的任何元素或属性。

分类:WCF 时间:2015-03-15 人气:3
本文关键词: WCF
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.325 (s). 10 q(s)