我有这种情况,我有
在数据合同中,我有一个数据成员如下......
[DataContract]
public class Cmd
{
[DataMember]
public string CommandText;
[DataMember]
public CommandType CommandType;
}
代理service.cs是在我的消费者项目的服务引用文件夹中生成的(可能是因为我正在使用vs 2005),其中包含enum CommandType获得新定义的服务的所有声明
[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "3.0.4506.30")]
[System.SerializableAttribute()]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://schemas.datacontract.org/2004/07/System.Data")]
public enum CommandType
{
Text,
StoredProcedure,
TableDirect,
}
而不是来自System.Data的原始枚举
public enum CommandType
{
Text = 1,
StoredProcedure = 4,
TableDirect = 512,
}
导致从客户端到服务器的CommandType值分配错误,
很抱歉这么长的问题陈述......
答案 0 :(得分:0)
尝试定义自己的枚举,它明确地从int继承,然后在自定义枚举到达服务器时从自定义枚举转换为System.Data枚举:
public enum MyEnum : int {
Text = 1,
StoredProcedure = 4,
TableDirect = 512,
}
服务器端:
CommandType t = (CommandType)myEnumVariable;
答案 1 :(得分:0)
WCF中的枚举只是字符串。您的CommandType值将作为“Text”,“StoredProcedure”等存在于SOAP有效内容中。仅在服务器端,您可以将它们作为int进行转换。如果要在合同中使用int值,则必须将Cmd.CommandType定义为int,并通过“KnownTypes”指令公开枚举。尽管如此,这种做法还是打败了它的目的。或者,只需完全避免在客户端进行投射。