У меня есть перечисление атрибута флага, стоящее за веб-службой следующим образом:
[Serializable,Flags]
public enum AccessLevels
{
None = 0,
Read = 1,
Write = 2,
Full = Read | Write
}
Моя проблема в том, что потребитель моего веб-сервиса не имеет исходных постоянных значений перечисления. Результирующая сторона клиента прокси-класса имеет что-то такое:
{
None = 1,
Read = 2,
Write = 4,
Full = 8
}
И поэтому, когда потребитель проверяет доступ «Чтение», это будет ложным, даже если «testItem» имеет значение «Полный»
((testItem & Svc.Read) == Svc.Read)
Как правильно предоставить флаги через веб-сервис?
EDIT:
Согласно этой статье , возможно, не удастся сделать то, что я хочу сделать. Иван Кривяков заявляет
несовершенная прозрачность перечислений
Оказывается, что перечисления не так
прозрачный, как мы хотели бы, чтобы они были.
Есть три проблемы:
- Если код на стороне сервера объявляет перечисление и назначает определенный числовой
ценности для своих членов, эти ценности
не будет виден клиенту.
- Если код на стороне сервера объявляет перечисление [Flags] с «составной» маской
значения (как в White = Red | Green | Blue),
это не отражается должным образом на
клиентская сторона.
- Если сервер или клиент передает «недопустимое» значение, которое находится за пределами
объем перечисления, это вызывает
исключение в XML-десериализаторе на
другая сторона.
Так что мне интересно, если это просто ограничение и невозможно.