为什么WSDL引入wsdl:message?

时间:2010-11-27 02:35:24

标签: wsdl abstraction

为什么WSDL引入了wsdl:message?和消息部分?

在操作参数(输入,输出,故障)中直接使用XSD会带来什么好处?

他们(带有wsdl消息部分的wsdl消息)如何比XSD更抽象?

为什么它没有以这种方式组织:

<operation name="GetEndorsingBoarder"> 
  <input type="xsd:string"/> 
  <output type="xsd:string, xsd:int, xsd:boolean"/> 
  <fault "type="xsd:string""/> 
</operation>

2 个答案:

答案 0 :(得分:1)

我明白了:

消息不只是指定操作的参数。

消息及其部分在绑定中引用。应该可以以不同的方式绑定不同的部分:

<message name="m1">
    <part name="body" element="tns:GetCompanyInfo"/>
</message>

<message name="m2">
    <part name="body" element="tns:GetCompanyInfoResult"/>
    <part name="docs" type="xsd:string"/>
    <part name="logo" type="tns:ArrayOfBinary"/>
</message>

<portType name="pt1">
    <operation name="GetCompanyInfo">
       <input message="m1"/>
       <output message="m2"/>
    </operation>
</portType>

 <binding name="b1" type="tns:pt1">
        <operation name="GetCompanyInfo">
           <soap:operation soapAction="http://example.com/GetCompanyInfo"/>
           <input>
               <soap:body use="literal"/>
           </input>
           <output>
               <mime:multipartRelated>
                   <mime:part>
                       <soap:body parts="body" use="literal"/>
                   </mime:part>
                   <mime:part>
                       <mime:content part="docs" type="text/html"/>
                   </mime:part>
                   <mime:part>
                       <mime:content part="logo" type="image/gif"/>
                       <mime:content part="logo" type="image/jpeg"/>
                   </mime:part>
               </mime:multipartRelated>
           </output>
        </operation>
    </binding>

我错过了这个,因为“非SOAP'文字'”绑定非常罕见。

答案 1 :(得分:0)

XSD描述了DATA方面,例如webservice调用的数据方面,而WSDL描述了Web服务的目的(方法调用)。您通常无法单独从数据中找出方法调用。

查看Generating a WSDL from an XSD file

上的Cheeso和Marc答案

编辑:source

message描述了Web服务提供者和消费者之间交换的数据,每个Web服务都有两条消息: 1)输入:Web服务的参数 2)输出:从Web服务返回数据

每个message都有零个或多个part个参数(一个用于Web服务函数的每个参数)每个part参数与types中定义的具体类型相关联容器元素。

   <message name="SayHelloRequest">
      <part name="firstName" type="xsd:string"/>
   </message>
   <message name="SayHelloResponse">
      <part name="greeting" type="xsd:string"/>
   </message>

这里定义了两个消息元素。第一个表示请求消息SayHelloRequest,第二个表示响应消息SayHelloResponse。

这些消息中的每一个都包含单个部分元素。对于请求,该部分指定函数参数;在这种情况下,我们指定一个firstName参数。对于响应,该部分指定函数返回值;在这种情况下,我们指定一个问候语返回值。