次のように、Web サービスの背後にあるフラグ属性の列挙があります。
[Serializable,Flags]
public enum AccessLevels
{
None = 0,
Read = 1,
Write = 2,
Full = Read | Write
}
私の問題は、Web サービスのコンシューマが列挙型の元の定数値を持っていないことです。結果として得られるプロキシ クラスのクライアント側には、次のようなものがあります。
{
None = 1,
Read = 2,
Write = 4,
Full = 8
}
したがって、消費者が「読み取り」アクセスをチェックしているとき、これは「testItem」が「Full」であっても false になります。
((testItem & Svc.Read) == Svc.Read)
Web サービスでフラグを適切に提供するにはどうすればよいですか?
編集:
この記事によると、私が探していることを実行できない可能性があります。イヴァン・クリヴィヤコフは次のように述べています
列挙型の不完全な透明性
列挙型は、私たちが望んでいたほど透過的ではないことがわかりました。厄介な問題が 3 つあります。
- サーバー側のコードが列挙型を宣言し、特定の数値をそのメンバーに割り当てる場合、これらの値はクライアントには表示されません。
- サーバー側のコードが [Flags] 列挙型を「複合」マスク値 (白 = 赤|緑|青のように) で宣言すると、クライアント側に正しく反映されません。
- サーバーまたはクライアントが列挙型の範囲外の「不正な」値を送信すると、反対側の XML デシリアライザーで例外が発生します。
だから、これは単なる制限であり、不可能なのだろうか。