У меня есть перечисление атрибута флага, которое находится за веб-службой следующим образом:
[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-де-сериализаторе на другая сторона.
Так что я задаюсь вопросом, является ли это просто ограничением и не возможно.