1

次のような値を持つ列挙型を含む Web サービスを作成しました

public enum DesignChoice
{            
    DesignerChoice = 1,
    CustomerChoice = 2,
    AdditionalDesign=3,
}

クライアント Web サイトへの参照を追加すると、次のコードのように列挙値が変更されます。

(int)DesignChoice.AdditionalDesign2を返しますが、3になると予想しています。

[System.Xml.Serialization.XmlTypeAttribute()]どこからともなくシリアライゼーション属性を試しましたが、うまくいきませんでした。

サービスの WSDL は、列挙型を次のように記述します。

 <s:simpleType name="DesignChoice">
        <s:restriction base="s:string">
          <s:enumeration value="DesignerChoice" />
          <s:enumeration value="CustomerChoice" />
          <s:enumeration value="AdditionalDesign" />
        </s:restriction>
      </s:simpleType>

VS のクラス名で F12 を押すと、メタデータから生成された次のコードが表示されます。

public enum DesignChoice
    {
        DesignerChoice = 0,
        CustomerChoice = 1,
        AdditionalDesign = 2,
    }

Visual Studio 2005 と .NET 2.0 を使用しています。

4

2 に答える 2

7

これが何が起こっているのか詳細な説明です

http://www.kerrywong.com/2006/11/09/be-careful-when-using-enums-in-web-services/

于 2012-09-03T16:48:17.997 に答える
2

サービスとの間で送受信される値は、Enum を表す文字列になります (例: ) <DesignChoice>CustomerChoice</DesignChoice>

サービス内のこの値は正しいはずですが、クライアントの数値情報は異なる可能性があるため、クライアントの値は何でもかまいません。彼らが正しい文字列値を送り返す限り、これは問題ではありません。クライアントが番号付けに明示的に依存している場合は、クライアントに設計上の欠陥がある可能性があります。または、サービスが Enum を予期する必要があるときに呼び出しの整数を予期しています。

于 2012-09-03T16:17:38.843 に答える