在 WCF 中传递枚举
Passing Enums in WCF
我在使用 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 引起的)
{"The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.9759247'."}
您可以尝试在枚举中的 [DataContract] 上方添加 [Serializable] 吗?可能在序列化方面有问题,但我不确定。请更新结果。
我通过使枚举从 0 而不是 1 开始来解决这个问题。
[DataContract]
public enum UserRoleEnum:int
{
[EnumMember]
SystemAdmin = 0,
[EnumMember]
Waiter = 1
}
并且我尝试不为枚举设置任何值,如下所示:
[DataContract]
public enum UserRoleEnum:int
{
[EnumMember]
SystemAdmin,
[EnumMember]
Waiter
}
两者都有效。但是我发现 post 将枚举设置为 0 不起作用(参见 link)http://haishibai.blogspot.com/2010/12/quick-tip-enum-types-in-wcf.html
谁能解释或确认枚举从 0 开始(而不是 WCF 中的 1)以及为什么我的结果与 post 不一致(也许博主不正确)?
我在使用 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 引起的)
{"The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:59.9759247'."}
您可以尝试在枚举中的 [DataContract] 上方添加 [Serializable] 吗?可能在序列化方面有问题,但我不确定。请更新结果。
我通过使枚举从 0 而不是 1 开始来解决这个问题。
[DataContract]
public enum UserRoleEnum:int
{
[EnumMember]
SystemAdmin = 0,
[EnumMember]
Waiter = 1
}
并且我尝试不为枚举设置任何值,如下所示:
[DataContract]
public enum UserRoleEnum:int
{
[EnumMember]
SystemAdmin,
[EnumMember]
Waiter
}
两者都有效。但是我发现 post 将枚举设置为 0 不起作用(参见 link)http://haishibai.blogspot.com/2010/12/quick-tip-enum-types-in-wcf.html
谁能解释或确认枚举从 0 开始(而不是 WCF 中的 1)以及为什么我的结果与 post 不一致(也许博主不正确)?