【问题标题】:XSD schema and SOAP requestXSD 模式和 SOAP 请求
【发布时间】:2014-02-12 23:45:12
【问题描述】:

我们有一个 xsd 模式,它概述了我们系统中所有可能的数据元素,有些是简单类型元素,有些是复杂类型。我们将此模式提供给另一位将尝试使用 SOAP 编写 Web 服务的开发人员。愚蠢示例中的 xsd 如下所示。

<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 服务。

在第二个选项中,它是否会产生任何架构验证错误?如果是这样,有没有办法绕过它?我可以向他发送一个自定义 SOAP 标头以指示我发送的消息类型,以便他可以针对特定的 xsd 元素对其进行验证吗?

我对 WebService 比较陌生,所以如果我误解了 SOAP、XSD 和 WebService 的基本机制,请随时指出或纠正我的上述任何假设。

【问题讨论】:

    标签: c# wcf web-services soap


    【解决方案1】:

    我认为他可以只做一个网络服务。

    我对 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".

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2014-05-11
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2015-11-15
      相关资源
      最近更新 更多