2010-05-13 57 views

回答

3

您可以創建一個方法,該方法可以在其枚舉中使用或返回一個值。當它們生成代理類時,枚舉上的名稱空間將更改爲您的服務名稱空間,但是您將擁有它們輸入的值。這不應該成爲一個問題,只要他們不嘗試在您的服務和第三方中使用相同的枚舉。

+1

請注意,這將公開具有相同名稱的枚舉,但不會保留整數值。 – 2013-06-12 02:31:48

3

這個問題是關於如何通過SOAP Web服務公開編程語言枚舉。這是無法完成的。這是爲什麼不是:

通過「enum」,OP意味着一種編程語言結構,它產生一個由命名的整數值組成的類型。例如:

public enum MyEnum 
{ 
    Value1 = 10, 
    Value2 = 20, 
    Value3 = 30 
} 

這產生如Value的對應值的名稱之間的關聯,以及,如10。在SOAP Web服務中沒有這樣的東西。

SOAP Web服務通過WSDL(Web服務描述語言)向客戶端描述自己。 WSDL使用XML Schema(XSD)來描述客戶端和服務之間要交換的數據的形狀。

XML模式有一個「枚舉」的概念,它描述某個元素或屬性可以具有多個值之一。這些值在XML模式中列出(枚舉)。例如,

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

這定義了一個類型,可以採取三個字符串值之一:「值1」,「值2」或「值3」。這些值與整數值沒有任何關聯。只是錘回家,考慮以下因素:

<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 2013年6月1日,6月5日或6月1日,2014年注有既不與任何整數值關聯,也不與任何字符串名稱關聯。

底線是XML Schema無法描述enum的編程語言概念。因此,WSDL不能使用enum的編程語言概念,這意味着SOAP Web服務無法公開enum

可以做的最好的辦法是公開名稱或值,但不是兩個,如上面的MyEnum。當客戶端使用該服務時,它可以用編程語言將MyEnum轉換爲enum。但是,由於沒有與任何名稱關聯的整數值,因此可以合理地預期每個客戶端使用不同的整數值。一個客戶端可能使用1作爲Value1,而另一個客戶端可能使用0