2014-02-12 89 views
0

我們有一個xsd模式,概述了我們系統中所有可能的數據元素,其中一些是簡單類型元素,一些是複雜類型。我們將這個模式提供給另一位將嘗試使用SOAP編寫Web服務的開發人員。一個啞巴下來的樣本中的xsd看起來像這樣。XSD模式和SOAP請求

<xs:element name="Element1"> .... </xs:element> 
<xs:element name="Element2"> .... </xs:element> 
<xs:element name="Element3"> .... </xs:element> 
<xs:element name="Element4"> .... </xs:element> 

我打算通過調用他的WebService方法發送我們的數據給他。由於我的系統生成的消息類型,我將有兩種類型的消息。第一個包含Element1和Element4,而第二個類型可能包含Element3,Element4和Element1。那麼他在這裏有什麼選擇?

  1. 他是否必須創建兩個單獨的Web服務,我會相應地使用它們?
  2. 創建一個Web服務,我將爲我的兩種消息類型使用該Web服務。

在第二個opotion中,它是否會生成任何模式驗證錯誤?如果有,是否有辦法避開它?我可以向他發送一個自定義SOAP頭以指示我發送的消息類型,以便他可以根據特定的xsd元素對其進行驗證?

我對WebService比較陌生,所以如果我誤解了SOAP,XSD和WebService的基本機制,請隨時指出它們或糾正我上面的任何假設。

回答

0

我認爲他可以只做一個web服務。

我並不是很喜歡XSD,但據我所知,有一個minOccurs屬性可以使這個工作只有一個web服務。例如:

<!--The syntax may be incorrect--> 
<xsd:complexType name="yourtype"> 
    <xsd:sequence> 
     <xsd:element name="Element1" minOccurs="1" maxOccurs="1" .../> 
     <xsd:element name="Element2" minOccurs="0" maxOccurs="1" ..../>    
     <xsd:element name="Element3" minOccurs="1" maxOccurs="1" ..../> 
     <xsd:element name="Element4" minOccurs="1" maxOccurs="1" ..../> 
    </xsd:sequence> 
</xsd:complexType> 

看那minOccurs="0",這意味着Element2可以通過其他的程序員中省略。如果你想要一些元素重複0或N次,你可以把maxOccurs="unbounded".