什么是 WSDL?含义及示例
⚡ 智能摘要
WSDL(Web 服务 DescriptWSDL(Web服务描述文件)是一种基于XML的文件,它告诉客户端应用程序Web服务的功能以及如何调用它。本资源解释了WSDL的结构、元素、消息、端口类型、绑定以及发布示例。
什么是 WSDL?
Web服务 Descript离子语言 (WSDL) 是一个基于 XML 的文件,它基本上告诉客户端应用程序 Web 服务的作用。WSDL 文件用于简要描述 Web 服务的作用,并为客户端提供连接到 Web 服务和使用 Web 服务提供的所有功能所需的所有信息。
在本教程中,我们将重点介绍 Web 服务最重要的部分,即 WSDL,或 Web 服务。 Descript离子语言。它充当连接者的角色。tracWeb 服务与任何想要使用该服务的客户端之间的连接。
WSDL 文档的结构
WSDL 文档用于描述 Web 服务。此描述是必需的,以便客户端应用程序能够理解 Web 服务实际执行的功能。
- WSDL 文件包含 Web 服务的位置信息,以及
- Web 服务公开的方法。
WSDL 文件本身对任何用户来说都可能看起来非常复杂,但它包含了客户端应用程序使用相关 Web 服务所需的所有必要信息。以下是 WSDL 文件的一般结构:
- 定义
- Target命名空间
- 数据类型
- 收件箱
- 端口类型
- 绑定
- 业务
这里需要注意的关键一点是,消息的定义,也就是通过……传递的内容。 SOAP 协议实际上,它是在 WSDL 文档中定义的。WSDL 文档告诉客户端应用程序 Web 服务发送和接收的 SOAP 消息类型。
换句话说,WSDL 就像一张明信片,上面写着特定地点的地址。这个地址提供了邮件应该送达的具体位置。因此,WSDL 文件就像一张明信片,上面写着能够提供客户端所需所有功能的 Web 服务的地址。
<!-- WSDL definition structure --> <definitions name="Guru99Service" targetNamespace=http://example.org/math/ xmlns=http://schemas.xmlsoap.org/wsdl/> <!-- abstract definitions --> <types> ... <message> ... <portType> ... <!-- concrete definitions --> <binding> ... <service> ... </definition>
下图是 WSDL 文件的结构图。
WSDL 的结构
WSDL 元素
WSDL 文件包含以下主要部分:
- 此 标签用于定义客户端应用程序和 Web 服务之间交换的消息中将使用的所有复杂数据类型。这一点至关重要,因为如果 Web 服务处理复杂数据类型,客户端应用程序必须知道如何处理它。诸如浮点数、数字和字符串之类的数据类型都是简单数据类型,但 Web 服务也可能提供结构化数据类型。例如,可能存在一个名为 EmployeeDataType 的数据类型,它包含两个元素:类型为字符串的“EmployeeName”和类型为数字或整数的“EmployeeID”。它们共同构成了一个复杂数据类型。
- 此 标签用于定义客户端应用程序和 Web 服务器之间交换的消息。这些消息说明了 Web 服务可以执行的输入和输出操作。例如,一条消息可以接收员工的 EmployeeID,输出消息可以根据提供的 EmployeeID 返回员工姓名。
- 此 标签用于将每条输入和输出消息封装到一个逻辑操作中。因此,可以有一个名为“GetEmployee”的操作,它将从客户端应用程序接受 EmployeeID 的输入消息与发送 EmployeeName 作为输出消息相结合。
- 此 标签用于将操作绑定到特定的端口类型。这样,当客户端应用程序调用相关的端口类型时,就能访问绑定到该端口类型的操作。端口类型就像接口一样。因此,如果客户端应用程序需要使用 Web 服务,就需要使用绑定信息来确保能够连接到该 Web 服务提供的接口。
- 此 标签是赋予 Web 服务本身的名称。最初,当客户端应用程序调用 Web 服务时,它会直接调用 Web 服务的名称。例如,Web 服务可以位于类似 http://localhost/ 的地址。Guru99/Tutorial.asmx。服务标签将包含 URL 已定义,它告诉客户端应用程序此位置有 Web 服务可用。
为什么使用 WSDL
Web 服务是构建现代 Web 应用程序的重要组成部分。它们的主要目的是允许使用不同编程语言构建的多个应用程序相互通信。例如,我们可以让一个 .NET Web 应用程序与一个 Web 应用程序进行通信。 Java 通过 Web 服务应用程序。
Web 服务具有以下主要特征:
- 它是使用 XML 编程语言构建的。几乎所有现代技术,例如 .Net 和 Java 具有能够处理 XML 的相应命令。因此,XML 被认为是构建 Web 服务最合适的语言。
- Web 服务通过 HTTP 协议进行通信。HTTP 是所有基于 Web 的应用程序都使用的协议。因此,确保 Web 服务也能够通过 HTTP 协议运行是理所当然的。
- Web 服务符合特定的语言规范。此规范由 W3C 制定,该组织是所有 Web 标准的管理机构。
- Web服务有一种称为WSDL的描述语言,用于描述Web服务。
WSDL 文件是用纯 XML 编写的。之所以采用 XML 格式,是为了让任何编程语言都能读取该文件。因此,如果客户端应用程序是用 .NET 编写的,它就能理解该 XML 文件。同样地,如果客户端应用程序是用其他语言编写的,它也能理解该 XML 文件。 Java 如果使用编程语言,那么它也能解释 WSDL 文件。
WSDL 文件将所有内容绑定在一起。从上图可以看出,您可以使用 .NET 语言创建 Web 服务。这就是服务的实现方式。如果您没有 WSDL 文件,但又想创建一个 Web 服务,那么您需要先创建一个 Web 服务。 Java 要使用 Web 服务,以前需要编写大量的代码。但现在有了 WSDL 文件(它是 XML 格式,任何编程语言都能理解),就可以轻松地实现这一点。 Java 类使用 .Net Web 服务。因此,编码工作量大大减少。
WSDL 消息部分
WSDL 包含一个名为“消息”的部分,该部分由 元素。该元素主要用于描述 Web 服务和客户端应用程序之间交换的数据。
每个 Web 服务始终包含 2 种类型的消息:
- 一个用于Web服务的输入,另一个用于Web服务的输出。
- 输入用于描述 Web 服务接受的参数。这是客户端应用程序的一个重要方面,以便它知道要作为参数发送到 Web 服务的值。
- 另一种类型的消息是输出消息,它告诉您 Web 服务提供了什么结果。
每条消息都会有一个 用于描述输入和输出消息所使用的参数的元素。
以下是一个简单的 Web 服务消息示例。该 Web 服务的功能是:当用户向其提交“教程 ID”作为参数时,提供该“教程”的名称。
- 我们可以看到,该网络服务有 2 条消息,一条用于输入,另一条用于输出。
- 输入消息名为 TutorialNameRequest,它有一个名为 TutorialID 的参数。该参数的类型为数字,由 xsd:number 类型指定。
- 输出消息名为 TutorialNameResponse,它有一个名为 TutorialName 的参数。该参数的类型为字符串,由 xsd:string 类型指定。
端口类型绑定
WSDL 中使用端口来定义 Web 服务提供的完整操作。在前文中,我们看到 Web 服务提供了两条消息,一条是名为“TutorialNameRequest”的输入消息,另一条是名为“TutorialNameResponse”的输出消息。输入消息和输出消息共同构成了一个完整的操作。
WSDL 提供了一个名为 用于定义Web服务提供的操作。
因此,在上面的例子中,我们可以注意到以下几点:
- 封装该操作的端口类型名称为“Tutorial_PortType”。
- 该操作本身被命名为“Tutorial”。因此,如果将 TutorialID 作为输入参数给出,我们的操作基本上会提供一个 TutorialName。
- 接下来是我们的两条消息,一条用于输入,另一条用于输出,它们构成了我们的操作。
除了 元素,还有 用于定义如何传输消息的元素。
- 上述示例表明,绑定由绑定名称组成,在本例中为“TutorialSoapBinding”。简而言之,绑定是客户端应用程序用于将自身绑定到 Web 服务的信息。绑定到 Web 服务后,客户端应用程序即可调用 Web 服务公开的各种操作。
- 传输层地址为 http://,这意味着消息将通过 HTTP 协议传输。
创建 WSDL 文件
无论使用哪种编程语言构建 Web 服务,都会创建 WSDL 文件。由于 WSDL 文件从头开始生成相当复杂,因此所有编辑器(例如 Visual Studio for .Net 和 .NET)都会自动生成 WSDL 文件。 Eclipse HPMC胶囊 Java 自动创建 WSDL 文件。
下面是在 Visual Studio 中创建的 WSDL 文件的示例。
<?xml version="1.0"?> <definitions name="Tutorial" targetNamespace=http://Guru99.com/Tutorial.wsdl xmlns:tns=http://Guru99.com/Tutorial.wsdl xmlns:xsd1=http://Guru99.com/Tutorial.xsd xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/ xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <schema targetNamespace=http://Guru99.com/Tutorial.xsd xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TutorialNameRequest"> <complexType> <all> <element name="TutorialName" type="string"/> </all> </complexType> </element> <element name="TutorialIDRequest"> <complexType> <all> <element name="TutorialID" type="number"/> </all> </complexType> </element> </schema> </types> <message name="GetTutorialNameInput"> <part name="body" element="xsd1:TutorialIDRequest"/> </message> <message name="GetTutorialNameOutput"> <part name="body" element="xsd1:TutorialNameRequest"/> </message> <portType name="TutorialPortType"> <operation name="GetTutorialName"> <input message="tns:GetTutorialNameInput"/> <output message="tns:GetTutorialNameOutput"/> </operation> </portType> <binding name="TutorialSoapBinding" type="tns:TutorialPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetTutorialName"> <soap:operation soapAction="http://Guru99.com/GetTutorialName"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="TutorialService"> <documentation>TutorialService</documentation> <port name="TutorialPort" binding="tns:TutorialSoapBinding"> <soap:address location="http://Guru99.com/Tutorial"/> </port> </service> </definitions>
上面的 WSDL 文件对任何用户来说看起来都非常复杂。我们将在后续教程中详细介绍各个部分,但现在,让我们先来简要了解一下 WSDL 文件每个部分的实际作用。
发布 Web 服务示例
现在让我们来看一个如何使用 Visual Studio 发布和使用 Web 服务的示例。在本例中,我们将创建一个包含一个 Web 方法的 Web 服务。该方法将接受一个名为“TutorialID”的整数参数。然后,该 Web 方法将返回一个名为“Web Services”的字符串。
接下来,我们将创建一个基于控制台的应用程序,该应用程序将使用此 Web 服务并相应地调用我们的 Web 方法。让我们来看看完成此示例所需的步骤。
步骤1) 第一步是创建 Web 服务。创建 Web 服务的详细步骤如下: 网络 已解释了如何创建网络项目和网络服务。 开始请按照相同的步骤创建项目和相应的 Web 服务。关键在于将以下代码添加到 Web 服务文件中。
namespace webservic_asmx { [WebService(Name = "Guru99 Web service")] public class TutorialService : System.Web.Services.WebService { [WebMethod] public string GetTutorialService(int TutorialID) { string TutorialName = "Web Services"; return TutorialName; } } }
Code 说明:
- 这里我们创建了一个名为“WebMethod”的方法Guru99WebService。” 在这个 Web 方法中,我们包含一个整数参数,每次调用此 Web 方法时都需要传递该参数。
- 接下来我们定义一个名为“TutorialName”的变量,它将保存“Web Services”的字符串值。这是调用 Web 服务时返回的值。
步骤2) 定义好 Web 服务文件后,下一步是创建一个客户端项目来调用这个 Web 服务。让我们创建一个简单的控制台应用程序来调用这个 Web 服务,并执行“Guru运行“99WebService”,然后将 Web 方法的输出显示在控制台日志屏幕中。请按照以下步骤创建控制台应用程序。右键单击 Visual Studio 解决方案文件,然后选择“添加”->“新建项目”。
步骤3) 在此步骤中,
- 确保首先选择 Visual C# Windows 选项。然后选择创建控制台应用程序的选项。
- 为您的项目命名,在我们的例子中为“DemoApplication”。
单击上图中的“确定”按钮后,您将能够在 Visual Studio 的解决方案资源管理器中看到该项目。
步骤4) 在此步骤中,您需要将 DemoApplication 控制台应用程序设置为启动项目。这样做是为了确保在整个 Visual Studio 项目运行时,该应用程序首先启动。该控制台应用程序随后会调用由 Visual Studio 自动启动的 Web 服务。要完成此步骤,请右键单击 DemoApplication 项目,然后选择“设置为启动项目”选项。
步骤5) 下一步是添加我们“的服务参考号”Guru将“99Webservice”添加到我们的控制台应用程序中。这样做是为了让 DemoApplication 能够引用该 Web 服务及其所有方法。为此,请右键单击 DemoApplication 项目文件,然后选择菜单选项“添加”->“服务引用”。
步骤6) 在此步骤中,我们将提供添加服务参考所需的各种值。
- 首先,我们需要选择发现选项。此选项将自动获取 TutorialService Web 服务的 WSDL 文件。
- 接下来,我们需要为服务参考编号命名。在本例中,我们将其命名为…… Guru99Web服务。
- 接下来,我们需要展开 TutorialService.asmx 选项,以便在右侧看到“GetTutorialService”方法。这里的 TutorialService.asmx 是我们的 Visual Studio .Net 文件的名称,该文件包含我们 Web 服务的代码。
- 接下来,我们将看到我们在名为“GetTutorialService”的 Web 服务中的 Web 方法。
点击“确定”按钮后,访问此 Web 服务所需的所有代码都将添加到我们的 DemoApplication 控制台应用程序中,如下所示。屏幕截图显示“Guru“99Webservice”已成功添加到我们的控制台应用程序中。
步骤7) 下一步是将代码添加到控制台应用程序中,以便访问 Web 服务中的 Web 方法。打开控制台应用程序自带的 Program.cs 代码文件,并添加以下代码。
namespace DemoApplication { class Program { static void Main(string[] args) { var client = new Guru99Webservice.Guru99WebserviceSoapClient(); Console.WriteLine(client.GetTutorialService(1)); Console.ReadKey(); } } }
Code 说明:
- 第一步是选择 Program.cs 文件。这是 Visual Studio 在创建控制台应用程序时创建的主文件。当控制台应用程序(在本例中为 DemoApplication)运行时,将执行此文件。
- 然后,我们创建一个名为“client”的变量,该变量将被设置为我们在前面步骤中创建的服务引用实例。在本例中,服务引用为“Guru99Web服务。Guru99WebserviceSoapClient()'。
- 然后,我们在 TutorialService Web 服务中调用 Web 方法“GetTutorialService”。请记住,GetTutorialService 方法接受一个整数参数,因此我们只需将一个整数参数传递给该 Web 方法即可。
- 最后一行代码是为了确保控制台日志屏幕保持活动状态,以便我们查看输出。该命令会等待用户输入。
输出
按照上述所有步骤操作后,运行 DemoApplication,将显示以下输出。
从输出中,我们可以清楚地看到 DemoApplication 调用我们的 Web 服务,并且 Web 服务返回的字符串显示在我们的控制台日志中。
















