c# - WCF 服务中未定义的枚举值

标签 c# wcf

我们有一个公开“客户”类型的 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/

相关文章:

C#/LINQ : Concatenating strings

c# - 适用于 Android 和 Windows Phone 7 的脚本语言

wcf - 跟踪对 WCF 服务进行的所有调用(及其堆栈)

c# - DirectoryCatalog 和 AssemblyCatalog 之间的区别

ASP.NET 到 WCF - 直通安全性?

c# - Automapper 和 MvcPager3 协同工作

C# MVVM - 这里需要模型吗?

c# - 在 C# 中为我的 List 包装器实现一个集合初始值设定项

c# - 使用 WCF 在另一个 CLR 地址空间中执行代码并返回对象

wcf - 通过 SSL 保护 WCF Web 服务