防止对象成员出现在 Web 服务的占位符中
Posted
技术标签:
【中文标题】防止对象成员出现在 Web 服务的占位符中【英文标题】:prevent object memebers from appearing in placeholders of web service 【发布时间】:2013-09-06 17:04:26 【问题描述】:我正在编写一个 Web 服务并传递了一个显示为的对象
<OfferDetail>
<OfferID>long</OfferID>
<InterestID>long</InterestID>
<RangeValue>string</RangeValue>
<Score>string</Score>
<Importance>string</Importance>
<Range>string</Range>
<ImportanceByOtherUser>string</ImportanceByOtherUser>
<RangeByOtherUser>string</RangeByOtherUser>
</OfferDetail>
在网络服务占位符中,但我不想要
<ImportanceByOtherUser>string</ImportanceByOtherUser>
<RangeByOtherUser>string</RangeByOtherUser>
到那里是占位符。 注意:我无法将它们从对象中移除
【问题讨论】:
“占位符”到底是什么意思?您是指浏览 Web 服务时获得的帮助页面吗?这是 ASMX 服务还是 WCF 服务? @JohnSaunders ys dat 是... ASMX 是一项遗留技术,不应用于新开发。 WCF 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:微软已经在 MSDN 上停用了ASMX Forum。 Inherited properties do not appear in soap sample on asmx file的可能重复 【参考方案1】:如果您使用的是 WCF,那么您可能已将 DataContractAttribute
应用于您通过服务返回其数据的对象。如果这是一个服务定义(我对此表示怀疑,但您没有发布任何 C# 代码),那么您将希望摆脱装饰这些属性的 OperationContractAttribute
。但我相信是后者而不是前者——所以我会先寻找DataContractAttribute
s。
HTH。
【讨论】:
【参考方案2】:只是想知道为什么?。
这些成员是用于内部网络服务还是私人数据?我有时看到一些开发人员通过 Web 服务直接发布 ORM 对象。虽然它可能有效,但通常不是一个好主意,因为您不想公开整个对象,而只想公开对象的一个子集,甚至是几个对象的组合(例如,客户的主要详细信息 + 本月的最后订单) .
因此,我强烈建议您重构代码。您应该创建一些专用于 Web 服务数据输出的 DTO 对象,以及用于输入的命令对象。
您指定不能更改对象,但是添加另一个图层呢?
【讨论】:
【参考方案3】:您使用的是什么类型的网络服务?根据这一点,您可以使用XmlIgnore
、NonSerialized
、IgnoreDataMember
等属性。
见
Question 1
Question 2
【讨论】:
【参考方案4】:这是一个已知的错误。
http://archive.msdn.microsoft.com/WsdlHelpGenerator/Release/ProjectReleases.aspx?ReleaseId=412
下载文件并在网络配置中添加以下内容
<webServices>
<wsdlHelpGenerator href="CustomWsdlHelpGenerator.aspx"/>
</webServices>
Href
应该指向你项目中下载的文件
【讨论】:
以上是关于防止对象成员出现在 Web 服务的占位符中的主要内容,如果未能解决你的问题,请参考以下文章
POWERPOINT中,在幻灯片的占位符中添加的文本有啥要求