在WCF服务中使用enum

在WCF服务中使用enum,wcf,web-services,Wcf,Web Services,我有一个用c编写的WCF web服务# 我有一个枚举 [DataContract(Namespace = "NameSpace")] public enum State { [EnumMember] NotAvailable = 1, [EnumMember] RunningTests = 3, [EnumMember] ReadyForTests = 4, [EnumMember]

我有一个用c编写的WCF web服务# 我有一个枚举

[DataContract(Namespace = "NameSpace")]
public enum State
{
        [EnumMember]
        NotAvailable = 1,
        [EnumMember]
        RunningTests = 3,
        [EnumMember]
        ReadyForTests = 4,
        [EnumMember]
        HungOrBroken = 5
}
然后,我运行以下命令生成可以在MFC应用程序中使用的.h、.cpp文件

svcutil.exe /t:metadata <webservice dll>
WSUtil.exe /prefix:Ws *.wsdl *.xsd
我理解枚举值不完全匹配的原因()。一切都按预期工作,只是当我将WSStateHungorBreak传递给web服务时,它无法正确解释它,而只是将其转换为0。它实际上应该是5,这就是它在web服务中的定义方式

如果有人能向我解释为什么会这样,或者我如何进一步调试,那将是非常有用的。值得注意的是,我尝试了SvcTraceViewer,但没有找到在服务和应用程序之间传递的数据

svcutil.exe /t:metadata <webservice dll>
WSUtil.exe /prefix:Ws *.wsdl *.xsd
编辑:在找到解决方案 默认情况下,所有WCF方法参数均为IsRequired=False,当枚举值为0时,WCF将此值视为空值,根本不将其传递给服务,服务使用默认值。设置所需的所有参数可以解决此问题。

您提供的参数会告诉您发生这种情况的原因。
enum
的数值不保留。由于HungorBreak是按字母顺序排列的第一个,因此它在客户端的值为0

这正是您在问题中发布的内容。

您提供的内容告诉您为什么会发生这种情况。
enum
的数值不保留。由于HungorBreak是按字母顺序排列的第一个,因此它在客户端的值为0


这正是您在问题中发布的内容。

为什么要专门为枚举分配数字?它们映射到我的数据库中的ID为什么要专门为枚举分配数字?它们映射到我的数据库中的ID我的意思是,在自动生成代码中是0,这很好。但是当Web服务接收到值时,不管C++代码的值是什么,它应该被转换为HungRead,而不仅仅是0,它不映射到任何东西。你应该用它来查看通过电线发送的内容。我打赌它会发送“0”。看看它为其他人发送了什么-然后向Microsoft投诉!我的意思是,在自动生成代码中是的,它是0,这很好。但是当Web服务接收到值时,不管C++代码的值是什么,它应该被转换为HungRead,而不仅仅是0,它不映射到任何东西。你应该用它来查看通过电线发送的内容。我打赌它会发送“0”。看看它为其他人发送了什么-然后向Microsoft投诉!