在WCF中传递枚举

本文关键字:枚举 WCF | 更新日期: 2023-09-27 18:01:40

我在WCF中使用枚举有问题。只要它返回带有枚举值的对象,我就会得到一个异常。我做了大量的搜索,发现了许多与我的问题相关的问题。我确实遵循了这些解决方案,但没有用。(我把那些Enum类型改为int,它工作了。当我将它更改为Enum时,我得到了一个异常。我相信是Enum造成了这个问题)。请帮助。

我有以下内容:

    [DataContract]
    public enum UserRoleEnum:int
    {
       [EnumMember]
       SystemAdmin = 1,                
       [EnumMember]
       Waiter = 2
    }
    [DataContract()]
    public partial class UserInfoDTO
    {
        [DataMember()]
        public Int32 UserID { get; set; }
        [DataMember()]
        public String UserName { get; set; }
        [DataMember()]
        public byte[] Password { get; set; }
        [DataMember()]
        public String UserStatusName { get; set; }
        [DataMember()]
        public UserRoleEnum UserRole { get; set; }
        .
        .
        .
     }

在我的服务联系人中,

[ServiceContract(SessionMode=SessionMode.Allowed)]
[ServiceKnownType(typeof(UserRoleEnum))]
public interface IUserService
{
    [OperationContract()]
    UserDTO[] GetUser(int userID);
}

我得到以下错误(我得出的结论是Enum导致它)

{"套接字连接被中止。这可能是由于处理消息时出现错误、远程主机超过接收超时或底层网络资源问题造成的。本地套接字超时'00:00:59.9759247'。"}

在WCF中传递枚举

你可以尝试在你的Enum中添加[Serializable]在[DataContract]之上吗?可能序列化有麻烦,但我不确定。

我通过使枚举从0开始而不是从1开始来解决这个问题。

 [DataContract]
 public enum UserRoleEnum:int
 {
    [EnumMember]
    SystemAdmin = 0,                
    [EnumMember]
    Waiter = 1
 }

和我尝试不为enum设置任何值,如下所示:

 [DataContract]
 public enum UserRoleEnum:int
 {
    [EnumMember]
    SystemAdmin,                
    [EnumMember]
    Waiter
 }

两者都有效。但我发现一个帖子设置enum为0不工作(见链接)http://haishibai.blogspot.com/2010/12/quick-tip-enum-types-in-wcf.html

谁能解释或确认枚举从0开始(而不是WCF中的1),为什么我的结果与帖子不一致(也许博主是不正确的)?