在WCF中传递枚举

时间:2015-07-09 05:49:25

标签: c# wcf enums

我在使用WCF中的Enums时遇到问题。一旦它返回带有枚举值的对象,我就得到了一个例外。我做了很多搜索,发现了很多与我遇到的问题有关的问题。我确实遵循了这些解决方案,但没有奏效。 (我将那些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' 。“}

2 个答案:

答案 0 :(得分:1)

您可以尝试在Enum中的[DataContract]上添加[Serializable]吗?可能在序列化方面遇到麻烦但我不确定。请更新结果。

答案 1 :(得分:1)

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

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

    [EnumMember]
    Waiter = 1
 }

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

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

    [EnumMember]
    Waiter
 }

两者都有效。但我发现将枚举设置为0的帖子不起作用(请参阅链接)http://haishibai.blogspot.com/2010/12/quick-tip-enum-types-in-wcf.html

任何人都可以解释或确认枚举是从0开始(而不是在WCF中为1)以及为什么我的结果与帖子不一致(可能是博客不正确)?