2010-08-30 63 views
7

我試着在網上看這件事,但所有的WSDL例子似乎沒有真正解釋,如果我要紀念的東西如WSDL或者int基本類型串...WSDL,枚舉和C#:它仍然低迷

基本上,我試圖使我的WSDL,以便我可以代表一個枚舉。我有一個C#的枚舉心中已經是我想匹配起來,以...

public enum MyEnum { 
    Item1 = 0, 
    Item2 = 1, 
    Item3 = 2, 
    SpecialItem = 99 
} 

我不知道我的WSDL應該是什麼樣子?我想,這是一個二,但即使如此,我「M不是100%肯定...

<wsdl:types> 
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       > 
     <xsd:simpleType name="MyEnum"> 
      <xsd:restriction base="xsd:int"> 
       <xsd:enumeration value="0" /> 
       <xsd:enumeration value="1" /> 
       <xsd:enumeration value="2" /> 
       <xsd:enumeration value="99" /> 
      </xsd:restriction> 
     </xsd:simpleType> 
    </xsd:schema> 
</wsdl:types> 

OR

<wsdl:types> 
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       > 
     <xsd:simpleType name="MyEnum"> 
      <xsd:restriction base="xsd:string"> 
       <xsd:enumeration value="Item1" /> 
       <xsd:enumeration value="Item2" /> 
       <xsd:enumeration value="Item3" /> 
       <xsd:enumeration value="SpecialItem" /> 
      </xsd:restriction> 
     </xsd:simpleType> 
    </xsd:schema> 
</wsdl:types> 

回答

9

枚舉最終會看起來像它們的字符串表示。所以,正確的WSDL將呈現枚舉爲:

<xs:simpleType name="MyEnum"> 
    <xs:restriction base="xsd:string"> 
     <xs:enumeration value="Item1" /> 
     <xs:enumeration value="Item2" /> 
     <xs:enumeration value="Item3" /> 
     <xs:enumeration value="SpecialItem" /> 
    </xs:restriction> 
    </xs:simpleType> 

以上會自動序列化/反序列化到MyEnum枚舉類型適合你。如果您將枚舉顯示爲xsd:int,那麼您最終不得不手動來回轉換它們。

你可以參考枚舉定義您的架構中,像這樣:

<xsd:complexType name="Class1"> 
    <xsd:sequence> 
     <xsd:element minOccurs="1" maxOccurs="1" name="MyEnumProperty" type="MyEnum" /> 
    </xsd:sequence> 
    </xsd:complexType> 
+0

它是如何知道我要SpecialItem是99?或者它不關心它是如何實現的?基本上,當我創建響應消息時,是否只需將MyEnum添加到該消息中,並將其序列化爲不存儲枚舉的基本int值,而是存儲字符串名稱,以便另一端可以通過名稱接收它的基值?那有意義嗎? – 2010-08-30 14:17:25

+0

串行器實際上並不關心。只要確保將值設置爲MyEnum類型,而不是整數。您還需要始終確保MyEnum枚舉的服務器端和客戶端定義是相同的,否則您會得到不理想的結果。 – code4life 2010-08-30 15:28:44

+0

所以基本上它會序列化名稱(即「SpecialItem」),它並不關心分配了什麼SpecialItem ...但爲了我自己的清晰度,我應該在客戶機和服務器上分配它們兩個都是99?如果我在客戶端分配了100個服務器,而在服務器上分配了99個,假設我沒有在他們自己的單獨編程中考慮這個問題,它會搞砸嗎? – 2010-08-31 15:14:58