2015-07-09 2 views
0

У меня возникли проблемы с использованием Enums в WCF. Как только он вернул объект с параметром enum, я получил исключение. Я много искал и нашел множество вопросов, связанных с проблемой, которую у меня есть. Я выполнял эти решения, но не работал. (Я изменил тип Enum на int, и он сработал. Я получил исключение, как только я изменил его на Enum. Я считаю, что Enum вызывает проблему). Пожалуйста помоги.Передача перечислений в WCF

У меня есть следующие:

[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 был причиной его)

{» Соединение сокета было прервано, что может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом или проблемой сетевого ресурса. out был «00: 00: 59.9759247». »

+1

ошибка вы получаете? –

+1

Какое исключение? – Bas

+1

какая ошибка вы получаете? –

ответ

0

Я решил эту проблему, сделав перечислений, чтобы начать на 0 вместо 1.

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

    [EnumMember] 
    Waiter = 1 
} 

и я пытался не устанавливать какие-либо значения для перечисления, как показано ниже:

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

    [EnumMember] 
    Waiter 
} 

Оба из них работают. Но я нашел сообщение о том, что настройка enums на 0 не работает (см. Ссылку) http://haishibai.blogspot.com/2010/12/quick-tip-enum-types-in-wcf.html

Может ли кто-нибудь объяснить или подтвердить, что перечисления начинаются с 0 (вместо 1 в WCF) и почему мои результаты несовместимы с (возможно, блоггер неверен)?

1

Вы можете попробовать добавить [Serializable] над [DataContract] в свой Enum? Возможно, у вас проблемы с сериализацией. Обновите результат.

+0

datacontracts являются сериализуемыми. –

+0

@KaanBoz Я попытался, как вы предложили и не work.I попробовал следующее: [Serializable] [DataContract] общественного перечисление UserRoleEnum: Int { [EnumMember] SystemAdmin = 1, [EnumMember] официант = 2 } – ShamirDaj

+0

@ShamirDaj Спасибо за ответ. Извините за результат. –

Смежные вопросы