2014-02-12 141 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".