1

我创建了一个包含枚举值的 Web 服务,其值如下

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

当我添加对我的客户网站的引用时,枚举值会更改为以下代码:

(int)DesignChoice.AdditionalDesign返回 2,但我希望它是 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>.

您的服务中 this 的值应该是正确的,但由于任何客户端上的数字信息可能不同,因此客户端上的值可以是任何值。只要他们发回正确的字符串值,这无关紧要。如果客户端显式依赖编号,则客户端可能存在设计缺陷,或者您的服务在调用时需要整数,而它应该期望 Enum。

于 2012-09-03T16:17:38.843 回答