假设:
问题:
如何通过我的方式公开这个枚举 网络服务,无需重复 我自己并重新输入enum的成员 在我的webservice的公共课中?
答案 0 :(得分:3)
您可以创建一个方法,该方法可以获取或返回包含枚举的值。枚举上的命名空间在生成代理类时将更改为您的服务命名空间,但您将获得它们在您的末尾输入的值。这应该不是问题,只要他们不试图在您的服务和第三方使用相同的枚举。
答案 1 :(得分:3)
这个问题询问如何在SOAP Web服务上公开编程语言枚举。这是不可能做到的。这就是为什么不:
通过“枚举”,OP表示编程语言构造,其生成由命名整数值组成的类型。例如:
public enum MyEnum
{
Value1 = 10,
Value2 = 20,
Value3 = 30
}
这会在名称(例如Value
)和相应值(例如10
)之间产生关联。 SOAP Web服务中没有这样的东西。
SOAP Web服务通过WSDL(Web服务描述语言)向客户端描述自己。 WSDL使用XML Schema(XSD)来描述客户端和服务之间要互换的数据的形状。
XML模式具有“枚举”的概念,它描述了某个元素或属性可以具有多个值之一。这些值在XML Schema中列出(枚举)。例如,
<xs:simpleType name="MyEnum">
<xs:restriction base="xs:string">
<xs:enumeration value="Value1"/>
<xs:enumeration value="Value2"/>
<xs:enumeration value="Value3"/>
</xs:restriction>
</xs:simpleType>
这定义了一个类型,它可以采用三个字符串值之一:“Value1”,“Value2”或“Value3”。这些值不以任何方式与整数值相关联。为了锤回家,请考虑以下事项:
<xs:simpleType name="MyDateEnumeration">
<xs:restriction base="xs:date">
<xs:enumeration value="2013-06-01"/>
<xs:enumeration value="2013-06-05"/>
<xs:enumeration value="2014-06-01"/>
</xs:restriction>
</xs:simpleType>
这定义了一种类型,它可以采用三个date
值之一:2013年6月1日,2013年6月5日或2014年6月1日。请注意,既没有与任何整数值的关联,也没有与任何字符串名称的任何关联。
底线是XML Schema无法描述enum
的编程语言概念。因此,WSDL无法使用enum
的编程语言概念,这意味着SOAP Web服务无法公开enum
。
可以做的最好的方法是公开名称或值,但不能同时公开两者,如上面的MyEnum
所示。当客户端使用该服务时,它可能会将MyEnum
转换为编程语言中的enum
。但是,由于没有与任何名称关联的整数值,因此可以合理地期望每个客户端使用不同的整数值。一个客户可能会将1
用于Value1
,而另一个客户可能会使用0
。