SOAP消息和WSDL之间的区别?

问题描述 投票:101回答:10

我感到困惑的SOAP消息和WSDL是如何结合在一起?我已经开始寻找到SOAP消息,例如:

    POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

是否所有的SOAP消息WSDL的? SOAP是接受自己的“SOAP消息”或“WSDL的协议?如果它们是不同的,那么当我应该使用SOAP消息的时候应该我使用WSDL的?

一些澄清围绕这将是真棒。

java web-services soap wsdl
10个回答
117
投票

甲SOAP文档每个请求发送。说我们是一家书店,并有我们询问学习某本书的当前价格的远程服务器。假设我们需要通过书名,页数和ISBN号到服务器。

每当我们想知道的价格,我们会送一个独特的SOAP消息。它会是这个样子;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPrice xmlns:m="http://namespaces.my-example-book-info.com">
      <ISBN>978-0451524935</ISBN>
      <Title>1984</Title>
      <NumPages>328</NumPages>
    </m:GetBookPrice>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

我们希望得到一个SOAP响应消息回来就好;

<SOAP-ENV:Envelope
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <m:GetBookPriceResponse xmlns:m="http://namespaces.my-example-book-info.com">
      <CurrentPrice>8.99</CurrentPrice>
      <Currency>USD</Currency>
    </m:GetBookPriceResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

的WSDL然后介绍如何当服务器接收它处理/处理此消息。在我们的例子,它描述了标题,NUMPAGES和ISBN会是什么类型的,我们是否应该期望从GetBookPrice消息是什么反应应该看起来像一个响应和。

该类型是这样的;

<wsdl:types>

  <!-- all type declarations are in a chunk of xsd -->
  <xsd:schema targetNamespace="http://namespaces.my-example-book-info.com"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">

    <xsd:element name="GetBookPrice">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="ISBN" type="string"/>
          <xsd:element name="Title" type="string"/>
          <xsd:element name="NumPages" type="integer"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

    <xsd:element name="GetBookPriceResponse">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="CurrentPrice" type="decimal" />
          <xsd:element name="Currency" type="string" />
        </xsd:sequence>
      </xsd:complexType>
    </xsd:element>

  </xsd:schema>
</wsdl:types>

但是,WSDL还包含更多的信息,有关哪些函数链接在一起,使操作和什么操作都在服务avaliable,并在网络上的行踪,你可以访问该服务/运营。

参见W3 Annotated WSDL Examples


-1
投票

在这个数字是WSDL和信息交换肥皂我们可以考虑一个电话。

WSDL是描述如何与通信server.SOAP连接是有沟通的消息。


75
投票

SOAP消息是用于发送数据一个XML文档。 WSDL是描述如何连接,并请求您的Web服务的XML文档。

基本上SOAP消息是你传输数据,WSDL告诉你,你可以做什么,以及如何打的电话。

在谷歌快速搜索会产生额外的阅读许多源(前一本书的链接已经死了,打击这种将投入评论任何新的建议)

只需注意您的具体问题:

是否所有的SOAP消息WSDL的?不,他们是不一样的东西都没有。

SOAP是接受自己的“SOAP消息”或“WSDL的协议?否 - 需要为这个读数相差不远。

如果它们是不同的,那么当我应该使用SOAP消息的时候应该我使用WSDL的?肥皂是,您对信息/数据转移结构。 WSDL文件仅用于确定如何拨打电话的服务摆在首位。通常,这是一次性的事情,当你第一次添加代码,以使一个特定的web服务的调用。


27
投票

一个WSDL(Web服务定义语言)是描述Web服务的元数据文件。

事情是这样操作的名称,参数等。

SOAP消息是实际的有效载荷


25
投票

我们需要定义什么是告诉前一个Web服务是什么SOAP和WSDL,其中两个(SOAP和WSDL)是Web服务的组件之间的差异

大多数应用程序的开发与用户交互,用户通过界面输入或搜索数据和应用程序,然后响应用户的输入。

Web服务确实或多或少同样的事情,不同的是一个Web服务应用程序通信,只能从机器到机器或应用到应用。往往没有直接的用户交互。

Web服务基本上是一个用于应用程序之间交换数据的开放协议的集合。使用开放协议使Web服务是平台无关。是写在不同的编程语言和不同的平台,运行可以使用Web服务,如Internet交换通过计算机网络数据的软件。换句话说,Windows应用程序可以跟PHP,Java和Perl的应用程序和许多人一样,在正常情况下是不可能的。

如何做web服务工作?

由于不同的应用程序是用不同的编程语言,他们往往不能互相通信。 Web服务能够通过使用开放协议和标准,主要是XML,SOAP和WSDL结合该通信。 Web服务使用XML标记数据,SOAP传输的消息,终于WSDL描述服务的可用性。让我们来看看一个Web服务应用程序的三个主要组成部分。

简单对象访问协议(SOAP)

简单对象访问协议或者SOAP是用于发送和接收应用程序之间的消息,而无需面临的互操作性问题(互操作性意味着一个Web服务上运行变得无关紧要平台)的协议。具有同样功能的其他协议是HTTP。它是用于访问网页或上网冲浪。 HTTP确保您不必担心什么样的Web服务器 - Apache或IIS或任何其他无论是 - 为你服务,你正在浏览的网页,或者是否您查看ASP.NET或HTML创建页面。

Because SOAP is used both for requesting and responding, its contents vary slightly depending on its purpose.

下面是SOAP请求和响应消息的一个例子

SOAP请求:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPrice> 
    <m:BookName>The Fleamarket</m:BookName> 
    </m:GetBookPrice> 
</soap:Body> 
</soap:Envelope>

SOAP响应:

POST /InStock HTTP/1.1 
Host: www.bookshop.org 
Content-Type: application/soap+xml; charset=utf-8 
Content-Length: nnn 
<?xml version="1.0"?> 
<soap:Envelope 
xmlns:soap="http://www.w3.org/2001/12/soap-envelope" 
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> 
<soap:Body xmlns:m="http://www.bookshop.org/prices"> 
    <m:GetBookPriceResponse> 
    <m: Price>10.95</m: Price> 
    </m:GetBookPriceResponse> 
</soap:Body> 
</soap:Envelope> 

虽然这两个消息看起来是一样的,他们执行不同的方法。例如在看上面的例子可以看到,请求消息使用GetBookPrice方法来获取图书价格。该响应由GetBookPriceResponse方法,这将是你的“请求”,将看到消息进行。你也可以看到,消息使用XML组成。

Web服务描述语言或WSDL

WSDL是描述Web服务的文件,并告诉您如何访问和使用它的方法。

WSDL takes care of how do you know what methods are available in a Web service that you stumble across on the Internet.

看看一个样本WSDL文件:

<?xml version="1.0" encoding="UTF-8"?> 
<definitions  name ="DayOfWeek"  
  targetNamespace="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:tns="http://www.roguewave.com/soapworx/examples/DayOfWeek.wsdl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://schemas.xmlsoap.org/wsdl/">  
  <message name="DayOfWeekInput"> 
    <part name="date" type="xsd:date"/> 
  </message> 
  <message name="DayOfWeekResponse"> 
    <part name="dayOfWeek" type="xsd:string"/> 
  </message> 
  <portType name="DayOfWeekPortType"> 
    <operation name="GetDayOfWeek"> 
      <input message="tns:DayOfWeekInput"/> 
      <output message="tns:DayOfWeekResponse"/> 
    </operation> 
  </portType> 
  <binding name="DayOfWeekBinding" type="tns:DayOfWeekPortType"> 
    <soap:binding style="document"  
      transport="http://schemas.xmlsoap.org/soap/http"/> 
    <operation name="GetDayOfWeek"> 
      <soap:operation soapAction="getdayofweek"/> 
      <input> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"  
          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </input> 
      <output> 
        <soap:body use="encoded"  
          namespace="http://www.roguewave.com/soapworx/examples"   
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> 
      </output> 
    </operation> 
  </binding> 
  <service name="DayOfWeekService" > 
    <documentation> 
      Returns the day-of-week name for a given date 
    </documentation> 
    <port name="DayOfWeekPort" binding="tns:DayOfWeekBinding"> 
      <soap:address location="http://localhost:8090/dayofweek/DayOfWeek"/> 
    </port> 
  </service> 
</definitions> 

要记住有关WSDL文件的主要的事情是,它为您提供:

  • Web服务的描述
  • 一个Web服务使用的方法,它需要的参数
  • 找到Web服务的一种方式

  • 7
    投票

    更好的类比不是电话:通过邮寄订购的产品从邮购服务。 WSDL文档是这样解释如何创建什么样的顺序形式的服务供应商将接受指令。 SOAP消息是像标准设计(尺寸,形状,结构),每一个邮局在世界各地知道如何处理的信封。你把你的订单到这样一个信封。的网络(例如因特网)是邮政服务。你把你的信封装入邮件。邮政的员工不看信封里面。有效载荷XML是已装入信封订单。邮局提供的信封后,网络服务提供商打开信封,处理订单。如果您已经创建并正确填写了表格,他们将寄给你奉命回到你的产品。


    4
    投票

    在一个简单来说,如果你有计算器的Web服务。 WSDL讲述,你可以实现或暴露给客户端的功能。例如:添加,删除,减等。凡为使用SOAP实际执行喜欢doDelete动作(),doSubtract()的doAdd()。因此,SOAP和WSDL是苹果和桔子。我们不应该对它们进行比较。他们都有各自不同的功能。


    1
    投票

    SOAP:这是用来从用户交换信息以Web服务或反之亦然的开放标准的基于XML的通信协议。肥皂只是其中的数据以某种方式组织的文件。对于每一个请求和响应单独的皂可以存在。

    WSDL:在肥皂中的数据以某种方式组织,这个组织在WSDL中指定,它必须使用的数据类型也在这里指定。请求和响应单个WSDL将存在


    0
    投票

    该WSDL是一种API提供者,它是描述Web服务客户端之间的合同:公共职能,可选/必填项...

    但是SOAP消息是客户和提供者之间传送的数据(有效负载)


    0
    投票

    WSDL充当发送者和接收者之间的接口。 SOAP消息是请求和在XML格式的响应。

    与Java RMI比较

    WSDL是接口类 SOAP消息被编组请求和响应消息。

    © www.soinside.com 2019 - 2024. All rights reserved.