工具资源

Web服务描述语言是什么,WSDL教程

Pinterest LinkedIn Tumblr

Web服务描述语言(WSDL)是一种基于XML的文件,基本上告诉客户端应用程序Web服务的功能。 WSDL文件用于简要描述Web服务的功能,并向客户端提供连接到Web服务并使用Web服务提供的所有功能所需的所有信息。WSDL教程将重点介绍Web服务的最重要部分,即WSDL或Web服务描述语言。

WSDL文件用于简要描述Web服务的功能,并向客户端提供连接到Web服务并使用Web服务提供的所有功能所需的所有信息。

WSDL教程

WSDL文档的结构

WSDL文档用于描述Web服务。这种描述是必需的,以便客户端应用程序能够理解Web服务实际执行的操作。

  • WSDL文件包含Web服务的位置和
  • Web服务公开的方法。

WSDL文件本身可能对任何用户看起来非常复杂,但它包含所有任何客户端应用程序需要使用相关Web服务的所有必要信息。

以下是WSDL文件的一般结构

  • 定义
  • TargetNamespace
  • 数据类型
  • 消息
  • Porttype
  • 绑定
  • 服务

这里需要注意的一件事是消息的定义,它是SOAP协议传递的内容,实际上在WSDL文档中定义。

WSDL文档实际上告诉客户端应用程序Web服务发送和接受的SOAP消息类型。

换句话说,WSDL就像一张明信片,上面有特定位置的地址。地址提供了递送明信片的人的详细信息。因此,以同样的方式,WSDL文件是明信片,上面有Web服务的地址,该地址可以提供客户端想要的所有功能。

<!-- WSDL定义结构 -->
<definitions
		name="Tizivps"
        targetNamespace=http://example.org/math/
        xmlns=http://schemas.xmlsoap.org/wsdl/>
	<!-- 抽象定义 -->
		<types> ...
			<message> ...
			<portType> ...

   <!-- 具体定义 -->
		<binding> ...
		<service> ...
</definition>

以下是WSDL文件结构的图表

WSDL的结构

WSDL元素

WSDL文件包含以下主要部分

  1. <types>标记用于定义所有复杂数据类型,这些数据类型将在客户端应用程序和Web服务之间交换的消息中使用。这是客户端应用程序的重要方面,因为如果Web服务使用复杂数据类型,则客户端应用程序应知道如何处理复杂数据类型。 float,number和string等数据类型都是简单数据类型,但是Web服务可能提供结构化数据类型。 例如,可能有一个称为EmployeeDataType的数据类型,它可以有称为“EmployeeName”的类型为字符串的2个元素和称为“EmployeeID”的类型为数字或整数的元素。它们共同形成一个数据结构,然后成为复杂数据类型。
  2. <messages>标记用于定义客户端应用程序和Web服务器之间交换的消息。这些消息将解释Web服务提供的输入和输出操作。消息的示例可以是接受员工的EmployeeID的消息,并且输出消息可以是基于提供的EmpoyeeID的员工姓名的消息。
  3. <portType>标记用于将每个输入和输出消息封装到一个逻辑操作中。因此,可能有一个名为“GetEmployee”的操作,它将从客户端应用程序接受EmployeeID作为输入消息,然后将EmployeeName作为输出消息发送。
  4. <binding>标记用于将操作绑定到特定的端口类型。这样,当客户端应用程序调用相关端口类型时,它将能够访问绑定到此端口类型的操作。端口类型就像接口一样。因此,如果客户端应用程序需要使用Web服务,则需要使用绑定信息以确保它们可以连接到该Web服务提供的接口。
  5. <service>标记是Web服务本身的名称。最初,当客户端应用程序调用Web服务时,它将通过调用Web服务的名称来执行。例如,Web服务可以位于地址http://localhost/Tizivps/Tutorial.asmx。服务标记实际上将具有定义为http://localhost/Tizivps/Tutorial.asmx的URL,这实际上将告诉客户端应用程序在此位置有Web服务可用。

为什么WSDL

Web服务是构建现代Web应用程序的重要组件。它们的主要目的是允许基于各种编程语言构建的多个应用程序彼此通信。例如,我们可以通过Web服务使.NET Web应用程序与Java应用程序通信。

Web服务具有以下关键特征

  • 它是使用XML编程语言构建的。几乎所有现代技术,如.NET和Java,都有相应的命令,具有使用XML的能力。因此,XML被视为构建Web服务的最合适语言。
  • Web服务通过HTTP通信。 HTTP是所有基于Web的应用程序使用的协议。因此,它很自然地确保Web服务也具有在HTTP协议上工作的能力。
  • Web服务符合特定的语言规范。该规范由W3C设置,W3C是所有Web标准的管理机构。
  • Web服务具有称为WSDL的描述语言,用于描述Web服务。

WSDL文件是纯旧的XML。它以XML形式编写,以便可以由任何编程语言读取该文件。

因此,如果客户端应用程序是使用.NET编写的,则会理解XML文件。同样,如果客户端应用程序使用Java编程语言编写,则也能够解释WSDL文件。

WSDL文件将所有内容绑定在一起。从上图可以看出,您可以在.NET语言中创建Web服务。

因此,这是服务的实现位置。如果您没有WSDL文件并且希望Java类使用Web服务,则需要大量编码工作才能实现此目的。

但是现在有了WSDL文件,该文件以XML形式存在,可以被任何编程语言理解,现在可以轻松地让Java类使用.NET Web服务。因此,编码工作量大大降低。

WSDL消息部分

WSDL包括一个名为“消息”的部分,其由<message>元素表示。

此元素基本上用于描述Web服务和客户端应用程序之间交换的数据。

每个Web服务始终具有2种类型的消息,

  • 一种用于Web服务的输入,另一种用于Web服务的输出。
  • 输入用于描述Web服务接受的参数。这是客户端应用程序的重要方面,以便它知道要作为参数发送的值。
  • 另一种类型的消息是输出消息,告诉Web服务提供的结果。

每个消息又会有一个<part>元素,用于描述输入和输出消息使用的参数。

以下是Web服务消息的简单示例。 Web服务的功能是一旦提交“教程ID”作为Web服务的参数,就提供“教程”的名称。

  1. 正如我们所看到的,Web服务有2个消息,一个用于输入,另一个用于输出。
  2. 输入消息称为TutorialNameRequest,其中有一个名为TutorialID的参数。此参数是由xsd:number类型指定的数字类型
  3. 输出消息称为TutorialNameResponse,其中有一个名为TutorialName的参数。此参数是由xsd:string类型指定的字符串类型

端口类型绑定

在 WSDL 中,端口用于定义 Web 服务提供的一个完整操作。

在前面的主题中,我们看到我们的 Web 服务提供了 2 条消息,一条用于输入名为 “TutorialNameRequest”,另一条用于输出名为 “TutorialNameResponse”。输入和输出消息一起形成了一个完整的操作。

WSDL 提供了一个名为 <portType> 的元素,用于定义 Web 服务所提供的操作。

因此,在我们上面的示例中,我们可以注意到以下内容:

  1. 封装操作的端口类型的名称为 “Tutorial_PortType”。
  2. 操作本身的名称为 “Tutorial”。因此,我们的操作基本上提供了一个 TutorialName,如果将 TutorialID 作为输入参数,则将返回该名称。
  3. 接下来是我们的 2 条消息,一条用于输入,另一条用于输出,这形成了我们的操作。

除了 <portType> 元素外,还有 <binding> 元素,用于定义消息将如何传输。

  1. 上面的示例显示,绑定由绑定名称组成,我们的情况下为 “TutorialSoapBinding”。简单来说,绑定是客户端应用程序用于实际将其绑定到 Web 服务的信息。一旦它实际绑定到 Web 服务,它就有能力调用 Web 服务提供的各种操作。
  2. 传输层给出为 http://,这意味着将通过 HTTP 协议传输消息。

创建 WSDL 文件

WSDL 文件是在任何编程语言中构建 Web 服务时创建的。

由于从纯粹的草稿中生成 WSDL 文件相当复杂,因此所有编辑器(例如 .Net 的 Visual Studio 和 Java 的 Eclipse)都会自动创建 WSDL 文件。

下面是在 Visual Studio 中创建的 WSDL 文件示例。

<?xml version="1.0"?>
<definitions name="Tutorial"
		targetNamespace=http://Tizivps.com/Tutorial.wsdl
        xmlns:tns=http://Tizivps.com/Tutorial.wsdl
        xmlns:xsd1=http://Tizivps.com/Tutorial.xsd
        xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
        xmlns="<http://schemas.xmlsoap.org/wsdl/>">
   <types>
   		<schema targetNamespace=http://Tizivps.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://Tizivps.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://Tizivps.com/Tutorial>"/>
    </port>
 </service>
</definitions>

以上 WSDL 文件对任何用户来说看起来都很吓人,我们将在随后的教程中详细介绍不同部分,但是现在,让我们简要地查看 WSDL 文件的每个部分实际上是做什么的。

发布 Web 服务示例

现在让我们看一个示例,了解如何发布 Web 服务并通过使用 Visual Studio 使用它。

在此示例中,我们将创建一个 Web 服务,其中包含一个 WebMethod。此方法将接受名为 “TutorialID” 的整数参数。然后,Web 方法将返回名为 “Web Services” 的字符串。

然后,我们将创建一个控制台应用程序,该应用程序将使用此 Web 服务并相应地调用我们的 Web 方法。

让我们看一下执行此示例所需的步骤。

第一步) 第一步是创建您的 Web 服务。如何创建 Asp.Net Web 项目和 Web 服务的详细步骤已在此处说明; 请按照相同的步骤创建项目和 Web 服务。关键部分是在 Web 服务文件中输入以下代码。

namespace webservic asmx
{
	[WebService(Name = "Tizivps Web service")]
	public class TutorialService : System.Web.Services.WebService
	{
		[WebMethod]
		public string GetTutorialService(int TutoriallD)
		{
			string TutorialName = "Web Services";
			return TutorialName;
		}
	}
}

代码说明:

  1. 在此处,我们正在创建一个名为 “TizivpsWebService” 的 WebMethod。在此 WebMethod 中,我们包括一个整数参数,每当调用此 WebMethod 时都需要传递该参数。
  2. 接下来,我们定义了一个名为 “TutorialName” 的变量,该变量将保存字符串值 “Web Services”。这是在调用 Web 服务时返回的值。

第二步) 一旦我们定义了 Web 服务文件,下一步是创建一个客户端项目,该项目将使用此 Web 服务。

让我们创建一个简单的控制台应用程序,该应用程序将调用此 Web 服务,调用“TizivpsWebService”,然后在控制台日志屏幕中显示 Web 方法的输出。按照以下步骤创建控制台应用程序。

右键单击 Visual Studio 解决方案文件,然后选择选项“添加->新项目”

第三步) 在此步骤中,

  1. 首先需要选择 Visual C# Windows 选项。然后选择创建控制台应用程序的选项。
  2. 为项目提供一个名称,在我们的情况下,该名称已被赋予为 “DemoApplication”。

在上面的屏幕中单击“确定”按钮后,您将能够在 Visual Studio 的解决方案资源管理器中看到该项目。

第四步) 在此步骤中,您将设置 DemoApplication 控制台应用程序作为启动项目。这样做是为了确保整个 Visual Studio 项目运行时首先启动此应用程序。这个控制台应用程序将反过来调用 Web 服务,这个 Web 服务将被 Visual Studio 自动启动。

要完成此步骤,请右键单击 DemoApplication 项目,并选择选项“设置为启动项目”。

第五步) 下一步是将我们的 “TizivpsWebservice” 服务引用添加到我们的控制台应用程序中。这样做是为了使 DemoApplication 可以引用 Web 服务以及 Web 服务中的所有 Web 方法。

要执行此操作,请右键单击 DemoApplication 项目文件,然后选择菜单选项“添加->服务引用”。

第六步) 在此步骤中,我们将提供添加服务引用所需的不同值

  1. 首先,我们需要选择我们的发现选项。此选项将自动选择 TutorialService Web 服务的 WSDL 文件。
  2. 接下来,我们应该为我们的服务引用提供一个名称。在我们的情况下,我们将其命名为 TizivpsWebservice。
  3. 然后,我们需要展开 TutorialService.asmx 选项,以便我们可以在右侧查看 “GetTutorialService” 方法。在这里,TutorialService.asmx 是包含我们的 Web 服务代码的 Visual Studio .Net 文件的名称。
  4. 然后,我们将看到我们在 Web 服务中拥有的 Web 方法称为 “GetTutorialService”

单击“确定”按钮后,所有访问此 Web 服务所需的代码都将添加到我们的 DemoApplication 控制台应用程序中,如下所示。

屏幕截图显示,“TizivpsWebservice”已成功添加到我们的控制台应用程序中。

第七步) 下一步是将代码添加到我们的控制台应用程序中,以访问我们的 Web 服务中的 Web 方法。打开自动带有控制台应用程序的 Program.cs 代码文件,并添加以下代码。

namespace DemoApplication
{
	class Program
	{
		static void Main(string[ ] args)
		{
			var client = new TizivpsWebservice.TizivpsWebserviceSoapClient();

			Console.WriteLine(client.GetTutorialService(l));

			Console.ReadKey();
		}
	}
}

代码说明:-

  1. 第一部分是选择 Program.cs 文件。这是创建控制台应用程序时 Visual Studio 自动创建的主文件。当执行控制台应用程序(在我们的情况下是演示应用程序)时,将执行此文件。
  2. 然后,我们创建一个名为 “client” 的变量,该变量将设置为我们在前面步骤中创建的 Service 引用的实例。在我们的情况下,服务引用是 ‘TizivpsWebservice.TizivpsWebserviveSoapClient()’
  3. 然后,我们在 TutorialService Web 服务中调用我们的 WebMethod ‘GetTutorialService’。请记住,我们的 ‘GetTutorialService’ 方法接受一个整数参数,因此我们只是将整数参数传递给 Web 方法。
  4. 这行最后是为了确保控制台日志屏幕保持活动状态,以便我们可以查看输出。此命令将等待用户的某些输入。

输出

当遵循所有上述步骤并运行 DemoApplication 时,将显示以下输出。

从输出中,我们可以清楚地看到 DemoApplication 调用了我们的 Web 服务,Web 服务返回的字符串显示在我们的控制台日志中。