Передача параметра WCF сервиса, имеющего тип перечисления - битового поля

Далее будет рассказано как передать параметр WCF сервиса типа enum, если этот enum используется как битовое поле.

Пусть есть WCF сервис со следующим методом:

    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        FlagsEnum GetEnum(FlagsEnum e);
    }

где

    public enum FlagsEnum
    {
        Flag1,
        Flag2
    }

И мы хотим вызывать метод сервиса следующим образом:

    var c = new Service1Client();
    var result = c.GetEnum(FlagsEnum.Flag1 | FlagsEnum.Flag2);

Для этого всего лишь нужно добавить в enum FlagsEnum необходимые атрибуты:

    [DataContract]
    [Flags]
    public enum FlagsEnum
    {
        [EnumMember]
        Flag1 = 1, //Было исправлено

        [EnumMember]
        Flag2 = 2 //Было исправлено
    }

Ссылка на проект: FlagsEnumThroughWcf.zip

.NET , WCF , C#


Комментировать

Комментарии

arusland.blogspot.com

23.07.2009 11:08

Можно ли обойтись без этого атрибута просто указав точные значения каждого значения этого enum'а?

Пример:

public enum FlagsEnum
{
Flag1 = 0x01,
Flag2 = 0x02,
Flag3 = 0x04
}

PS: Чем пользуешься для подсветки кода?

arusland.blogspot.com

23.07.2009 11:09

А еще замечание: почему не учитываешь переход на другую строку в комментариях? :)

chyuck

23.07.2009 12:04

Конечно, я ошибся, значение полей enum нужно обязательно указывать так чтобы они побитово не пересекались (1,2,4,8 ...). А получалось что значения были (0,1,2 ...), а это неправильно. Я исправил ошибки.
По поводу использования атрибута Flags. Атрибут добавляет ряд полезных свойств. Например, ToString() выводит значения в виде полей enum, а не int. (см. MSDN)
Для подсветки кода пользуюсь SyntaxHighlighter. Ссылка лежит в разделе "О сайте" (http://chyuck.com/Blog/About)

chyuck

23.07.2009 12:06

По поводу перехода на новую строку в комментариях - постараюсь исправить.
Спасибо за замечание.

chyuck

25.07.2009 19:28

Руслан
Я исправил переход на другую строку

arusland.blogspot.com

25.07.2009 19:33

Вот теперь приятно читать многострочные коменты :)
Thx