如何通过我的asmx公开第三方的枚举?

时间:2010-05-13 14:51:48

标签: c# .net .net-2.0 asmx enums

假设:

  • asmx网络服务。
  • 包含有用枚举的第三方dll。

问题:

  

如何通过我的方式公开这个枚举   网络服务,无需重复   我自己并重新输入enum的成员   在我的webservice的公共课中?

2 个答案:

答案 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