- asmx web服務。
- 包含有用枚舉的第三方dll。
問:
如何我通過 Web服務公開此枚舉,而無需重複 自己,重新鍵入枚舉的成員,我的web服務的公共類 ?
問:
如何我通過 Web服務公開此枚舉,而無需重複 自己,重新鍵入枚舉的成員,我的web服務的公共類 ?
您可以創建一個方法,該方法可以在其枚舉中使用或返回一個值。當它們生成代理類時,枚舉上的名稱空間將更改爲您的服務名稱空間,但是您將擁有它們輸入的值。這不應該成爲一個問題,只要他們不嘗試在您的服務和第三方中使用相同的枚舉。
這個問題是關於如何通過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
。
請注意,這將公開具有相同名稱的枚舉,但不會保留整數值。 – 2013-06-12 02:31:48