问题:虽然输入不同,但WCF服务接收到的第一个enum成员值

本文关键字:第一个 成员 enum 服务 WCF 输入 问题 | 更新日期: 2023-09-27 18:04:24

背景

作为我对WCF服务请求的一部分,我传入了一个枚举值Add(详细信息见下文),但是使用共享库的枚举对象(本质上是相同的,并使用AutoMapper映射)的服务实现似乎只能读取第一个成员,即Equal。换句话说,用户输入Add,但是服务实现得到一个Equal

我有一个定义为 的enum
[DataContract]
public enum MyOperator
{
    [EnumMember]
       Equal = 0,
    [EnumMember]
     Add = 1,
      [EnumMember]
Subtract = 2
}

该enum是另一个数据契约的属性,如下所示:

[DataContract]
public class MyExpression
{
 [DataMember]
  public string Field {get;set;}
 [DataMember]
  public string Value{get;set;}
 [DataMember]
  public MyOperator Operator {get;set;}
}

最后,它包含在我的请求正文中:

[DataContract]
public class RequestBody
{
...
public MyExpression Expression {get;set;}
...
}

对应的枚举对象位于共享库中,定义为:

    public enum MyOperator
    {
           Equal = 0,
           Add = 1,
       Subtract = 2
    }

在调试服务实现期间(使用这个共享库的MyOperator enum),我观察到的问题是,尽管用户输入Add作为Soap请求的一部分,我每次仍然看到Equal。

我尝试将MyOperator声明为KnownType,但这似乎没有帮助。

谢谢你的帮助!如果您需要更多的细节请告诉我

问题:虽然输入不同,但WCF服务接收到的第一个enum成员值

在没有更多信息的情况下很难猜测,但我的第一个猜测是,它试图将字符串"equal"转换为int,它失败并返回0(默认int),在你的情况下将是相等的。

我能想到的唯一一件事是,它可能无法在两个枚举之间进行转换,因为它们可能在不同的命名空间中。

您的服务似乎无法找到您在请求中传递的值并获取enum的第一个值。您可以做的是更新WSDL的定义并再次运行请求。这应该解决的问题,这对我来说是有效的,让我知道,如果它不工作。