我有一个用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
以上命令生成具有以下内容的文件:
typedef enum WsState
{
WsStateHungOrBroken = 0,
WsStateNotAvailable = 1,
WsStateReadyForTests = 2,
WsStateRunningTests = 3,
}
我理解为什么枚举值不完全匹配(info)。一切都按预期工作,除了当我将WsStateHungOrBroken传递给Web服务时,它无法正确解释它并简单地将其转换为0.它应该是5,这就是它在Web服务中的定义。
如果有人能向我解释为什么会这样或者我如何进一步调试,那将是有用的。作为一个注释,我已经尝试过SvcTraceViewer,但没有运气找出服务和我的应用程序之间传递的数据。
修改:在http://thorarin.net/blog/post/2010/08/08/Controlling-WSDL-minOccurs-with-WCF.aspx#comment找到解决方案 默认情况下,所有WCF方法参数都是IsRequired = False,当枚举值为0时,WCF将其视为空值,并且根本不将其传递给服务且服务使用默认值。制作所需的所有参数可以解决问题。
答案 0 :(得分:1)
你提供的link告诉你为什么会这样。 enum
的数值不会保留。由于HungOrBroken
按字母顺序排在第一位,因此客户端的值为0。
这正是您在问题中发布的内容。