不同的书籍和不同的组织为Web服务提供不同的定义。其中有些列在这里。
Web服务是通过互联网使自己可用的任何软件,并使用标准化的XML消息系统。XML用于将所有通信编码到Web服务。例如,客户机通过发送XML消息来调用Web服务,然后等待相应的XML响应。由于所有的通信都是XML,所以Web服务不受任何操作系统或编程语言的限制 - Java可以与Perl进行交谈; Windows应用程序可以与Unix应用程序通信。
Web服务是独立的,模块化的,分布式的,动态的应用程序,可以通过网络描述,发布,定位或调用,以创建产品,流程和供应链。这些应用程序可以是本地的,分布式的或基于Web的。Web服务建立在开放标准之上,如TCP / IP,HTTP,Java,HTML和XML。
Web服务是基于XML的信息交换系统,它们使用Internet进行直接的应用程序到应用程序的交互。这些系统可以包括程序,对象,消息或文档。
Web服务是用于在应用程序或系统之间交换数据的开放协议和标准的集合。使用各种编程语言编写并运行在各种平台上的软件应用程序可以使用Web服务通过计算机网络(如Internet)以类似于单个计算机上的进程间通信的方式交换数据。这种互操作性(例如,Java和Python之间,或Windows和Linux应用程序)是由于使用开放标准。
总而言之,完整的Web服务因此是任何服务:
基本的Web服务平台是XML + HTTP。所有标准Web服务使用以下组件工作
所有这些组件都已在“ Web服务架构”一章中探讨过。
Web服务通过使用开放标准(如HTML,XML,WSDL和SOAP)实现各种应用程序之间的通信。Web服务有以下帮助:
您可以在Solaris上创建基于Java的Web服务,该服务可以从在Windows上运行的Visual Basic程序访问。
您还可以使用C#在Windows上创建新的Web服务,可以从基于JavaServer Pages(JSP)的Web应用程序调用并在Linux上运行。
考虑一个简单的帐户管理和订单处理系统。会计人员使用由Visual Basic或JSP创建的客户端应用程序来创建新帐户并输入新的客户订单。
该系统的处理逻辑是用Java编写的,它驻留在一个Solaris机器上,它也与一个数据库进行交互以存储信息。
执行此操作的步骤如下:
客户端程序将帐户注册信息捆绑成一个SOAP消息。
该SOAP消息作为HTTP POST请求的主体发送到Web服务。
Web服务解包SOAP请求并将其转换为应用程序可以理解的命令。
应用程序根据需要处理信息,并对该客户使用新的唯一帐号进行响应。
接下来,Web服务将响应打包到另一个SOAP消息中,它将响应其HTTP请求发送回客户端程序。
客户端程序解包SOAP消息以获取帐户注册过程的结果。
以下是使用Web服务的好处:
Web服务是可以使用HTTP远程调用的托管代码的单位,也就是可以使用HTTP请求激活。Web服务允许您通过网络公开现有代码的功能。一旦暴露在网络上,其他应用程序可以使用您的程序的功能。
Web服务允许各种应用程序相互交流,并在他们之间共享数据和服务。其他应用程序也可以使用Web服务。例如,VB或.NET应用程序可以与Java Web服务进行通信,反之亦然。Web服务用于使应用程序平台和技术独立。
Web服务使用标准化的行业标准协议进行通信。所有四个层(服务传输,XML消息,服务描述和服务发现层)在Web服务协议栈中使用定义良好的协议。协议栈的这种标准化给企业带来了诸多选择,竞争降低成本,提高质量等诸多优点。
Web服务使用SOAP over HTTP协议,因此您可以使用现有的低成本Internet来实现Web服务。与EDI / B2B等专有解决方案相比,该解决方案成本要低得多。除了SOAP over HTTP之外,Web服务也可以在其他可靠的传输机制(如FTP)上实现。
Web服务具有以下特殊行为特征:
Web Services在数据表示和数据传输层使用XML。使用XML消除了任何网络,操作系统或平台绑定。基于Web Services的应用程序在其核心层面是高度可互操作的应用程序。
Web服务的消费者不直接与该Web服务绑定。Web服务接口可以随时间而改变,而不会影响客户与服务进行交互的能力。紧密耦合的系统意味着客户端和服务器逻辑彼此紧密相连,这意味着如果一个接口发生变化,则必须更新另一个接口。采用松散耦合架构往往使软件系统更易于管理,并允许不同系统之间的简单集成。
面向对象的技术,如Java,通过单独的方法公开他们的服务。一种单独的方法在公司层面提供任何有用功能的操作是太好了。从头创建Java程序需要创建几个细粒度的方法,然后将其组合成由客户端或其他服务使用的粗粒度服务。
企业和他们所接触的接口应该是粗粒度的。Web服务技术提供了一种自定义粗粒度服务的方式,可以访问适当的业务逻辑。
同步性是指客户端与服务执行的绑定。在同步调用中,客户端在继续之前阻止并等待服务完成其操作。异步操作允许客户端调用服务,然后执行其他功能。
异步客户端在稍后的时间点检索其结果,而同步客户端在服务完成时收到其结果。异步功能是实现松散耦合系统的关键因素。
Web服务允许客户端使用基于XML的协议调用远程对象上的过程,函数和方法。远程过程暴露Web服务必须支持的输入和输出参数。
通过Enterprise JavaBeans(EJB)和.NET组件的组件开发已经越来越成为过去几年中架构和企业部署的一部分。这两种技术通过各种RPC机制进行分布和访问。
Web服务通过提供自己的服务,相当于传统组件的服务,或通过将传入调用转换为EJB或.NET组件的调用来支持RPC。
XML的一个关键优点是它不仅表示数据,而且还代表复杂的文档。这些文件可以简单地表示当前地址,或者它们可以与表示整本书或报价请求(RFQ)一样复杂。Web服务支持文件的透明交换,促进业务整合。
有两种方法来查看Web服务体系结构:
Web服务架构中有三个主要角色:
这是Web服务的提供者。服务提供商实现该服务并使其在Internet上可用。
这是Web服务的任何消费者。请求者通过打开网络连接并发送XML请求来利用现有的Web服务。
这是一个逻辑上集中的服务目录。注册表提供了开发人员可以发布新服务或查找现有服务的中心位置。因此,它作为公司及其服务的集中式交换所。
查看Web服务架构的第二个选项是检查新兴的Web服务协议栈。堆栈仍在发展,但目前有四个主要层。
该层负责在应用程序之间传输消息。目前,此层包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),文件传输协议(FTP)以及更新的协议,如块扩展交换协议(BEEP)。
该层负责以通用的XML格式对消息进行编码,以便可以在任一端理解消息。目前,该层包括XML-RPC和SOAP。
该层负责描述特定Web服务的公共接口。目前,服务描述通过Web服务描述语言(WSDL)来处理。
该层负责将服务集中到公共注册表中,并提供简单的发布/查找功能。目前,通过通用描述,发现和集成(UDDI)处理服务发现。
随着Web服务的发展,可以添加附加的层,并且可以向每个层添加附加的技术。
下一章将介绍Web服务的组件。
Web服务协议栈的底层是服务传输。该层负责在两台计算机之间实际传输XML消息。
目前,HTTP是最受欢迎的服务传输选项。HTTP是简单,稳定和广泛部署。此外,大多数防火墙允许HTTP流量。这允许XML-RPC或SOAP消息伪装成HTTP消息。如果要集成远程应用程序,这很好,但它确实引起了一些安全问题。
这是一个有希望的替代HTTP。BEEP是创建新协议的新型互联网工程任务组(IETF)框架。BEEP直接在TCP上分层,并且包括许多内置功能,包括初始握手协议,认证,安全性和错误处理。使用BEEP,可以为各种应用程序创建新的协议,包括即时消息,文件传输,内容联合和网络管理。
SOAP不绑定到任何特定的传输协议。实际上,您可以通过HTTP,SMTP或FTP使用SOAP。因此,一个有希望的想法是使用SOAP over BEEP。
在过去几年中,三项主要技术已经成为构成当今Web服务技术核心的全球标准。这些技术将在下面探讨。
这是用于在计算机之间交换信息的最简单的基于XML的协议。
要了解有关XML-RPC的更多信息,请访问我们的XML-RPC教程 。
SOAP是一种基于XML的协议,用于在计算机之间交换信息。
要了解有关SOAP的更多信息,请访问我们的SOAP教程。
WSDL是一种基于XML的语言,用于描述Web服务以及如何访问它们。
要了解有关WSDL的更多信息,请访问我们的WSDL教程。
UDDI是用于描述,发布和查找Web服务的基于XML的标准。
UDDI代表通用描述,发现和集成。
UDDI是Web服务的分布式注册表的规范。
UDDI是平台独立,开放的框架。
UDDI可以通过SOAP,CORBA和Java RMI协议进行通信。
UDDI使用WSDL来描述Web服务的接口。
UDDI被认为是SOAP和WSDL作为Web服务的三个基础标准之一。
UDDI是一个开放的行业计划,使企业能够发现彼此,并定义他们如何通过互联网进行互动。
要了解有关UDDI的更多信息,请访问我们的UDDI教程。
基于Web服务架构,我们创建以下两个组件作为Web服务实现的一部分:
这是Web服务的提供者。服务提供商实现该服务并使其在Internet或Intranet上可用。
我们将使用.NET SDK编写和发布简单的Web服务。
这是Web服务的任何消费者。请求者通过打开网络连接并发送XML请求来利用现有的Web服务。
我们还将编写两个Web服务请求者:一个基于Web的消费者(ASP.NET应用程序)和另一个基于Windows应用程序的消费者。
以下是我们第一个作为服务提供商的Web服务示例,并展示了两种方法(add和SayHello)作为应用程序使用的Web服务。这是Web服务的标准模板。.NET Web服务使用.asmx扩展名。请注意,作为Web服务公开的方法具有WebMethod属性。将此文件作为FirstService.asmx保存在IIS虚拟目录中(如配置IIS所述;例如,c: MyWebSerces)。
FirstService.asmx <%@ WebService language = "C#" class = "FirstService" %> using System; using System.Web.Services; using System.Xml.Serialization; [WebService(Namespace="http://localhost/MyWebServices/")] public class FirstService : WebService { [WebMethod] public int Add(int a, int b) { return a + b; } [WebMethod] public String SayHello() { return "Hello World"; } }
要测试一个Web服务,它必须被发布。Web服务可以在Intranet或Internet上发布。我们将在本地机器上运行的IIS上发布此Web服务。让我们从配置IIS开始吧。
打开开始→设置→控制面板→管理工具→Internet服务管理器。
展开并右键单击默认网站; 选择新建→虚拟目录。虚拟目录创建向导将打开。点击下一步。
“虚拟目录别名”屏幕打开。键入虚拟目录名称。例如MyWebServices。并单击下一步。
“网站内容目录”屏幕打开。
输入虚拟目录的目录路径名。例如,c: MyWebServices单击“下一步”。
“访问权限”屏幕打开。根据您的要求更改设置。让我们保留此练习的默认设置。
单击下一步按钮。它完成IIS配置。
单击完成以完成配置。
要测试IIS是否已正确配置,请在上面创建的虚拟目录(C: MyWebServices)中复制HTML文件(例如x.html)。现在,打开Internet Explorer并键入http://localhost/MyWebServices/x.html。它应该打开x.html文件。
注意:如果不起作用,请尝试用本机的IP地址替换本地主机。如果仍然不起作用,请检查IIS是否正在运行; 您可能需要重新配置IIS和虚拟目录。
要测试此Web服务,请在上面创建的IIS虚拟目录(C: MyWebServices)中复制FirstService.asmx。在Internet Explorer中打开Web服务(http://localhost/MyWebServices/FirstService.asmx)。它应该打开您的Web服务页面。该页面应具有链接到我们的应用程序作为Web服务公开的两种方法。恭喜!你已经写了你的第一个网络服务!
正如我们刚才看到的那样,在.NET Framework中编写Web服务很容易。在.NET框架中编写Web服务使用者也很容易; 然而,它有一点更多的参与。如前所述,我们将编写两种类型的服务消费者,一种基于Web和另一种基于Windows应用程序的消费者。让我们写第一个Web服务消费者。
编写一个基于网络的消费者,如下所示。称它为WebApp.aspx。请注意,它是一个ASP.NET应用程序。将其保存在Web服务的虚拟目录(c: MyWebServices WebApp.aspx)中。
此应用程序有两个文本字段用于从用户获取要添加的数字。它有一个按钮,执行,当点击获取添加和SayHello Web服务。
WebApp.aspx <%@ Page Language="C#" %> <script runat="server"> void runSrvice_Click(Object sender, EventArgs e){ FirstService mySvc = new FirstService(); Label1.Text = mySvc.SayHello(); Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text), Int32.Parse(txtNum2.Text)).ToString(); } </script> <html> <head> </head> <body> <form runat="server"> <p> <em>First Number to Add </em>: <asp:TextBox id="txtNum1" runat="server" Width="43px">4< /asp:TextBox> </p> <p> <em>Second Number To Add </em>: <asp:TextBox id="txtNum2" runat="server" Width="44px">5</asp:TextBox> </p> <p> <strong><u>Web Service Result -</u></strong> </p> <p> <em>Hello world Service</em> : <asp:Label id="Label1" runat="server" Font-Underline="True">Label< /asp:Label> </p> <p> <em>Add Service</em> : & <asp:Label id="Label2" runat="server" Font-Underline="True">Label</asp:Label> </p> <p align="left"> <asp:Button id="runSrvice" onclick="runSrvice_Click" runat="server" Text="Execute"></asp:Button> </p> </form> </body> </html>
消费者创建后,我们需要为要使用的Web服务创建一个代理。在引用已添加的Web服务时,Visual Studio .NET可以自动完成此工作。以下是要遵循的步骤:
创建要使用的Web服务的代理。代理使用.NET SDK附带的WSDL实用程序创建。此实用程序从Web服务提取信息并创建代理。该代理仅对特定Web服务有效。如果您需要使用其他Web服务,则还需要为此服务创建一个代理。当添加Web Service引用时,Visual Studio .NET会为您自动创建一个代理。使用.NET SDK提供的WSDL实用程序为Web Service创建代理。它将在当前目录中创建FirstSevice.cs文件。我们需要编译它来为Web Service创建FirstService.dll(代理)。
c:> WSDL http://localhost/MyWebServices/FirstService.asmx?WSDL c:> csc /t:library FirstService.cs
编写基于Windows应用程序的Web服务使用者与编写任何其他Windows应用程序相同。您只需要创建代理(我们已经完成),并在编译应用程序时引用此代理。以下是使用Web服务的Windows应用程序。此应用程序创建一个Web服务对象(当然是代理),并调用SayHello,并在其上添加方法。
WinApp.cs using System; using System.IO; namespace SvcConsumer{ class SvcEater { public static void Main(String[] args) { FirstService mySvc = new FirstService(); Console.WriteLine("Calling Hello World Service: " + mySvc.SayHello()); Console.WriteLine("Calling Add(2, 3) Service: " + mySvc.Add(2, 3).ToString()); } } }
使用c:> csc /r:FirstService.dll WinApp.cs编译它。它将创建WinApp.exe。运行它来测试应用程序和Web服务。
现在,出现的问题是:您如何确定此应用程序实际上是调用Web服务?
测试很简单 停止Web服务器,以便无法联系Web服务。现在,运行WinApp应用程序。它会引发运行时异常。现在,再次启动Web服务器。应该工作
安全性对Web服务至关重要。但是,XML-RPC和SOAP规范都不会提供任何明确的安全或身份验证要求。
Web服务有三个具体的安全问题:
如果客户端向服务器发送XML请求,我们可以确保通信保密吗?
答案在这里:
单个Web服务可能包含一系列应用程序。例如,一个大型服务可能将三个其他应用程序的服务结合在一起。在这种情况下,SSL是不够的; 消息需要沿着服务路径在每个节点加密,并且每个节点表示链中的潜在的弱链路。目前,这个问题没有一致的解决方案,但一个有希望的解决方案是W3C XML加密标准。该标准提供了加密和解密整个XML文档或只是XML文档的一部分的框架。您可以在http://www.w3.org/Encryption查看
如果客户端连接到Web服务,我们如何识别用户?用户是否有权限使用该服务?
可以考虑以下选项,但对强认证方案没有明确的共识。
HTTP包括对Basic和Digest身份验证的内置支持,因此可以以与HTML文档当前受保护的方式大致相同的方式来保护服务。
SOAP数字签名(SOAP-DSIG)利用公钥加密技术对SOAP消息进行数字签名。它使客户端或服务器验证对方的身份。请访问http://www.w3.org/TR/SOAP-dsig。
提高结构化信息标准组织(OASIS)正在研究安全声明标记语言(SAML)。
目前,这个问题目前还没有简单的答案,这已经是很多争论的话题了。现在,如果您真的想过滤出SOAP或XML-RPC消息,一种可能性是将所有HTTP POST请求过滤出来,将其内容类型设置为text / xml。
另一种方法是过滤SOAPAction HTTP头属性。防火墙供应商目前还在开发明确设计用于过滤Web服务流量的工具。
本章介绍了有关Web服务的所有最新标准。
BEEP,块可扩展交换协议(以前称为BXXP)是创建应用协议的框架。它已经被IETF标准化,它对于Internet协议对于数据做了什么。
这些消息传递标准和规范旨在为分散式分布式环境中的信息交换提供框架。
仅当潜在用户可能找到足以允许其执行的信息时,Web服务才有意义。这些规范和标准的重点是定义一套支持业务,组织和其他Web服务提供商的描述和发现的服务; 他们提供的网络服务; 以及可用于访问这些服务的技术接口。
使用这些安全规范,应用程序可以进行旨在与一般Web服务框架一起工作的安全通信。
Web服务可管理性被定义为一组功能,用于发现Web服务架构中Web服务的存在,可用性,运行状况,性能,使用情况以及Web服务的控制和配置。随着Web服务对企业运营的普及和关键,管理和实施它们的任务对于业务运营的成功至关重要。
在本教程中,您已经了解了如何使用Web服务。但是,Web服务还包括有助于使其处于活动状态的组件,例如WSDL,UDDI和SOAP。下一步是学习WSDL,UDDI和SOAP。
WSDL是一种基于XML的语言,用于描述Web服务以及如何访问它们。
WSDL描述了Web服务,以及Web服务的消息格式和协议详细信息。
要了解有关WSDL的更多信息,请访问我们的WSDL教程。
UDDI是用于描述,发布和查找Web服务的基于XML的标准。
要了解有关UDDI的更多信息,请访问我们的UDDI教程。
SOAP是一种简单的基于XML的协议,允许应用程序通过HTTP交换信息。
要了解有关SOAP的更多信息,请访问我们的SOAP教程。