是否可以在 WCF wsdl 中包含一个 DataContract 类,而该类不属于任何 OperationContract?

Posted

技术标签:

【中文标题】是否可以在 WCF wsdl 中包含一个 DataContract 类,而该类不属于任何 OperationContract?【英文标题】:Is it possible to include a DataContract class in WCF wsdl without that class being part of any OperationContract? 【发布时间】:2019-03-13 23:54:41 【问题描述】:

我有一个带有 PostData 操作合同的 WCF 服务。此方法接受一个字符串。这个字符串应该是 3 个序列化的对象之一。我为这些对象创建了 2 个类并用 [DataContract] 和 [DataMembers] 装饰它们。

因为我没有在 PostData Operation 合同中引用这些类,所以它们没有出现在 WSDl 中。希望客户端能够创建这些类之一的实例,然后在 PostData 中传递序列化对象。这将使我免于创建 3 个不同的 OperationContracts。

这可能吗?

谢谢

【问题讨论】:

听起来很不寻常,为什么不直接使用参数中的类型而不是先序列化它 我有 3 种不同的类型可以传入。这意味着有 3 个 PostData 函数采用不同的类型。我也会有其他服务方法,所以每当我添加一个方法时,我都需要添加 3 个 “可以传入的3种不同类型”本身就是一个奇怪的设计。尽可能避免它。取而代之的是,添加一个引用您的类型的虚拟方法。 这也许会对你有所帮助:***.com/questions/37415505/… 【参考方案1】:

所以我决定在这里。

客户端可以序列化 3 种类型并传递给单个 Web 方法。 我在共享 dll 中提供了这 3 种类型。 客户端创建其中一种类型的对象,序列化并将其与 Enum 参数一起传递给 Web 服务。 此 Enum 允许 Web 服务将字符串反序列化回适当的类型并继续处理。

这减少了 Web 服务端的工作量,因为我不必为每种类型编写一个 Web 方法,我可以只需要一个方法。

这可能对希望解决类似问题的其他人有所帮助。

【讨论】:

以上是关于是否可以在 WCF wsdl 中包含一个 DataContract 类,而该类不属于任何 OperationContract?的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制台服务主机中包含 WCF 自定义标头

能否结合来自 WCF 服务的 WSDL 和 XSD 数据?

WCF - 如何在服务响应中包含/添加 WS-Addressing“TO”标头

是否可以在XMLHttpRequest标头中包含antiforgerytoken?

根据 WCF 服务中发布的 xml 内容识别操作,而不在 Url 中包含操作名称

如果 Json 变量在 WCF 中包含空格或任何特殊字符,如何获取 Json 值