背景
作为我对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
声明为KnownType
,但这似乎没有帮助。
感谢您的帮助!如果您需要其他详细信息,请与我们联系
答案 0 :(得分:0)
没有更多的信息,很难猜测,但我的第一个猜测就是它试图将字符串“等于”转换为int并且它失败并返回0(默认int),这在你的情况下是相同的
我能想到的唯一另一件事就是它可能无法在2个枚举之间进行转换,因为它们位于不同的名称空间中。
答案 1 :(得分:0)
您的服务似乎无法找到您在请求中传递的值并获取枚举的第一个值。您可以做的是更新WSDL的定义并再次运行请求。这应该解决了这个问题,这对我有用,如果它不起作用,请告诉我。