我们有一个公开“客户”类型的 WCF 服务,即:
[DataContract(Name = "CustomerData", Namespace = "http://www.testing.com")] public partial class Customer { [DataMember] public CustomerLevel Level { get; set; } }
可以看到上面的类型有一个属性是枚举类型。这个枚举的定义是:
[IgnoreCoverage] [DataContract(Namespace = "http://www.testing.com"")] public enum CustomerLevel : int { [EnumMember(Value = "Platinum")] Platinum = 1, [EnumMember(Value = "Gold")] Gold = 2, [EnumMember(Value = "Silver")] Silver = 3, [EnumMember(Value = "Bronze")] Bronze = 4, }
只要服务器为它返回的每个客户发送有效的枚举,该服务就可以正常工作。但是,如果服务返回未在枚举中定义的 CustomerLevel,则服务调用超时。
错误的 CustomerLevel 值示例可能是:
customer.Level = (CustomerLevel)0;
如果客户端尝试发送未定义的值,服务也会超时。
有什么方法可以让未定义的值同时流向客户端和服务器,并让它们各自处理错误的值?
最佳答案
我不认为你会让伪造的枚举起作用。他们会反序列化成什么?如果您的意思是客户端发送整数,则将类型更改为 int,并自行将其转换为枚举(使用您自己的错误处理)。
关于客户端是否应该超时,请告诉我们您使用的是哪种客户端。此外,我建议您查看网络流量并查看服务如何响应(如果有的话)。还要查看 Windows 事件日志以查看该服务是否有任何投诉。最后,您可能想要打开 WCF 跟踪以查看服务对此有何 react 。
关于c# - WCF 服务中未定义的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735078/