0

背景

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

细节

我有一个枚举定义为

[DataContract]
public enum MyOperator
{
    [EnumMember]
       Equal = 0,
    [EnumMember]
     Add = 1,
      [EnumMember]
Subtract = 2
}

此枚举是另一个数据合约的属性,如下所示:

[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 枚举)期间,我观察到的问题是,尽管用户输入 Add 作为 Soap 请求的一部分,但我仍然每次都看到 Equal。

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

谢谢你的帮助!如果您需要更多详细信息,请告诉我

4

2 回答 2

0

IT 似乎您的服务无法找到您在请求中传递的值并获取枚举的第一个值。您可以做的是更新 WSDL 的定义并再次运行请求。这应该解决了这个问题,这对我有用,如果它不起作用,请告诉我。

于 2013-03-26T23:06:55.450 回答
0

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

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

于 2013-03-16T03:28:43.130 回答