【问题标题】:Enum not passed successfully from .NET2.0 Client to WCF Service枚举未成功从 .NET2.0 客户端传递到 WCF 服务
【发布时间】:2012-01-17 21:36:04
【问题描述】:

我有一个 WCF 服务 (.NET4.0)。客户端在 .NET2.0 中。客户端传递给服务的枚举值始终设置为枚举默认值(即第一个枚举成员)。

这是 .NET2.0 中的问题吗?有什么解决方法吗?

【问题讨论】:

  • 我为每个枚举字段找到了 Specified field(bool)。如果我将这些 指定的字段设置为 true,然后在枚举成员中设置值,WCF 服务就能够获得准确的传递值。如果未设置指定字段(默认为 false),则仅接收枚举的默认值。为什么会有这种行为?
  • 这是因为这些属性是可选的。表明它们存在的唯一方法是使用这个单独的字段。如果需要,则不需要该字段。
  • 谢谢约翰。我为数据成员指定了 IsRequired 属性, 指定的字段消失了,并且客户端设置的值也被接收。这似乎适用于所有在 .NET 中具有默认值的数据类型,例如 int、bool、enums。

标签: wcf xmlserializer web-reference


【解决方案1】:

Specified 是 XmlSerializer 使用的一项功能。我以前被这个刺痛过。它让每个人都以同样痛苦的方式发现这个功能。

正如您所说,如果将其设置为 false,那么您的字段将不会被序列化。不幸的是 false 是布尔字段的默认值,因此如果您忘记设置它会非常烦人。

如果您不喜欢此功能,那么您应该可以直接删除 Specified 字段而不会产生任何后果。然后该字段将始终被序列化。

这些字段只会产生影响,因为您在 .NET 2 中使用 XmlSerializer。在 .NET 4 WCF 应用程序中,您使用的是不具备此功能的 DataContractSerializer。

WCF 并没有真正接收到枚举的默认值。该枚举的服务器上实际上没有收到任何内容。因此枚举没有设置,所以它仍然是默认值。

【讨论】:

  • 谢谢 Buh Buh。我不想编辑生成的元数据,而是设置数据成员的 IsRequired 属性,这很有效。
  • 是的,您的解决方案更好。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2013-11-11
  • 2012-02-24
  • 2012-08-28
相关资源
最近更新 更多