手机版

介绍php如何调用webservice应用程序

时间:2021-10-06 来源:互联网 编辑:宝哥软件园 浏览:

1.1.Web Service的基本概念Web Service也称为XML Web Service WebService是一种轻量级且独立的通信技术,可以从Internet或Intranet上的其他系统接收请求。是:通过SOAP在Web上提供的软件服务,由WSDL文件描述,UDDI注册。XML:(可扩展标记语言)一种可扩展标记语言。短期临时数据处理和全球网络是Soap的基础。SOAP:(简单对象访问协议)简单对象访问协议。是XML网络服务的通信协议。当用户通过UDDI找到您的WSDL描述文档时,他可以调用您通过SOAP创建的Web服务中的一个或多个操作。是以XML文档的形式对调用方法的规范,可以支持不同的底层接口,比如HTTP(S)或者SOAP。Wsdl: (web服务描述语言)Wsdl文件是描述一组SOAP消息以及如何交换这些消息的XML文档。在大多数情况下,它是由软件自动生成和使用的。Uddi(通用描述、发现和集成)是一个主要针对Web服务提供者和用户的新项目。在用户可以调用Web服务之前,他必须确定服务中包含哪些业务方法,找到要调用的接口定义,并在服务器上编译软件。UDDI是指导系统根据描述文档找到相应服务的机制。UDDI SOAP消息机制(标准XML/HTTP)用于发布、编辑、浏览和查找注册信息。它采用XML格式封装各种类型的数据,并将其发送到注册表或注册表返回所需的数据。1.2.XML Web服务的特点Web服务的主要目标是跨平台的互操作性。为实现这一目标,Web Service完全基于XML(可扩展标记语言)、XSD(XML Schema)等独立于平台和软件厂商的标准,是一种用于创建可互操作和分布式应用程序的新平台。因此,使用网络服务有很多优点。1.跨防火墙的通信。如果应用程序有成千上万的用户,并且分布在世界各地,客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常有防火墙或代理服务器。传统上,浏览器被选为客户端,大量的ASP页面被写下来,将应用程序的中间层暴露给最终用户。因此,很难开发和维护该程序。如果客户端代码不再那么依赖HTML表单,客户端编程将会简单得多。如果将中间层组件替换为Web Service,可以直接从用户界面调用中间层组件,省去了创建ASP页面的步骤。要调用网络服务,您可以直接使用SOAP客户端,如微软SOAP工具包或。net,或者可以使用自己开发的SOAP客户端,然后将其与应用程序连接起来。它不仅缩短了开发周期,而且降低了代码复杂度,增强了应用程序的可维护性。同时,应用程序不再需要每次调用中间层组件时都跳转到相应的“结果页面”。2.应用集成企业级的应用开发人员都知道,企业往往会集成各种不同语言编写的、运行在不同平台上的程序,这种集成会耗费大量的开发力量。应用程序通常需要从正在运行的主机上的程序中获取数据。或将数据发送到主机或其他平台应用程序。即使在同一个平台上,不同软件厂商生产的各种软件也往往需要集成。通过网络服务,应用程序可以使用标准方法来“公开”函数和数据供其他应用程序使用。XML Web服务提供了在松散耦合的环境中使用标准协议(HTTP、XML、SOAP和WSDL)交换消息的能力。消息可以是结构化的、类型化的或松散定义的。

3.B2B对B2B的集成是指企业对企业,就像企业与其他企业做生意一样,电子商务从企业到企业,即企业之间通过互联网交换产品、服务和信息。通俗的说法是指电子商务交易的供方和需方都是商家(或企业和公司),他们利用互联网技术或各种商业网络平台来完成商业交易的过程。网络服务是B2B集成成功的关键。有了网络服务,公司只能向指定的供应商和客户“公开”关键业务应用程序。网络服务运行在互联网上,可以在世界任何地方轻松实现,因此其运行成本相对较低。网络服务只是B2B集成的一个关键部分,实现集成还需要许多其他部分。B2B与网络服务集成的最大优势是可以轻松实现互操作性。只要业务逻辑被‘暴露’并成为Web Service,任何指定的合作伙伴都可以调用业务逻辑,不管他们的系统运行在什么平台上,也不管他们使用什么开发语言。这大大减少了花在B2B集成上的时间和成本。4.软件和数据重用网络服务不仅允许代码被重用,还可以重用代码背后的数据。使用网络服务,在从应用程序调用软件组件之前,不再需要从第三方购买和安装这些组件。只需要直接调用远程网络服务。软件重用的另一种情况是,通过集成几个应用程序的功能并通过Web Service公开它们,您可以轻松地将所有这些功能集成到您的门户网站中,为用户提供统一友好的界面。您可以在应用程序中使用第三方网络服务提供的功能,也可以通过网络服务向其他人提供自己的应用程序功能。在这两种情况下,您都可以重用代码及其背后的数据。从上面的讨论可以看出,当通过网络进行互操作或远程调用时,网络服务是最有用的。然而,在某些情况下,网络服务根本不能带来任何好处,网络服务也有一些缺点:1。单机应用目前,很多桌面应用仍然被企业和个人使用。其中一些只需要与这台计算机上的其他程序通信。在这种情况下,最好不要使用网络服务,只使用本地应用编程接口。COM非常适合在这种情况下工作,因为它体积小,速度快。在同一台服务器上运行的服务器软件也是如此。当然,Web Service也可以用在这些场合,但它不仅会消耗太多,而且不会带来任何好处。2.一些局域网应用在很多应用中,所有的程序都使用Windows平台下的COM,运行在同一个局域网上。在这些程序中,DCOM比SOAP/HTTP有效得多。同样,如果一个. net程序要连接到另一个。net程序。应该使用. net远程处理。实际上,在。net Remoting,还可以为Web服务调用指定SOAP/HTTP。不过还是直接通过TCP进行RPC调用比较好,效果会好很多。1.3.XML网络服务的应用1。最初的XML Web Service通常是可以轻松融入到应用中的信息源,比如股价、天气预报、运动表现等等。2.以可扩展标记语言网络服务的形式提供现有的应用程序可以构建新的更强大的应用程序,并使用可扩展标记语言网络服务作为构建模块。例如,用户可以开发一个采购应用程序,自动从不同的供应商那里获取价格信息,这样用户就可以选择供应商,提交订单,然后跟踪货物的运输,直到收到货物。除了在网络上提供服务,供应商的应用程序还可以使用XML网络服务来检查客户的信用,收取货款,并与货运公司办理货运手续。第二,网络服务开发。net平台内置了对web服务的支持,包括web服务的构建和使用。

与其他开发平台不同,使用。net平台,无需其他工具或SDK即可完成Web Service的开发。那个。net Framework本身完全支持Web Service,包括服务器端的请求处理器和客户端对发送和接收SOAP消息的支持。接下来,我们将使用微软Visual Studio逐步创建和使用一个简单的网络服务。net 20058(以下简称VS.Net 2008)。2.1.用创建一个最简单的Web Service:首先,打开VS2005,打开‘文件-新建-网站’,选择‘ASP.NET Web Service’(9500 . 163.com)。

查看Service.cs代码,你会发现VS.Net 2005已经为网络服务文件建立了缺省的框架。原始代码为:复制代码代码如下:使用系统;使用系统Linq .使用系统网络.使用系统。网络服务;使用系统。网络服务协议;使用系统Xml。linq[WebServiCe(Namespace=' http://tempuri。org/')][WebServiceBinding(CONFOrmSTO=WSiprofiles .base cprofile 1 _ 1)]//若要允许使用ASP。NET AJAX从脚本中调用此网服务,请取消对下行的注释//[系统。公共类服务:系统网络。服务。web Service { public Service(){//如果使用设计的组件,请取消注释以下行//初始化组件();} [WebMethod]公共字符串hello world(){ 0返回《你好,世界》;} }使用系统;使用系统Linq .使用系统网络.使用系统。网络服务;使用系统。网络服务协议;使用系统Xml。linq[WebServiCe(Namespace=' http://tempuri。org/')][WebServiceBinding(CONFOrmSTO=WSiprofiles .base cprofile 1 _ 1)]//若要允许使用ASP。NET AJAX从脚本中调用此网服务,请取消对下行的注释//[系统。公共类服务:系统网络。服务。web Service { public Service(){//如果使用设计的组件,请取消注释以下行//初始化组件();} [WebMethod]公共字符串hello world(){ 0返回《你好,世界》;}} 默认工程里面已经有一个你好世界的方法了,直接运行看看效果

点击显示页面上图中的地狱世界超链接,跳转到下一页面

点击“调用”按钮,可以看到下图以XML格式返回的Web服务结果。这表明我们的网络服务环境没有问题,我们已经初步接触了最简单的网络服务。2.2.创建一个简单的具有功能的网络服务。以上,我们对webservice有一个宏观的理解,但实际上它是一个外部接口,具有外部客户可以调用的功能(注意,在:中也有客户不能调用的功能)。如果我们是一个服务器,我们已经编写了一个webservice并将其提供给客户(同时,我们已经给了他们调用规则)。客户可以在相对透明的状态下从服务器获取信息。也就是说,客户不知道(也不需要)这个过程,所以他们只得到数据。在代码文件中,如果我们编写了一个函数,并且希望它是一个外部可调用的接口函数,那么我们必须在函数中添加一行代码[WebMethod(Description='函数的描述信息')]。如果您的函数没有这个声明,它就不会有。首先,对默认的HelloWorld方法进行注释,简单写出加减乘除四种计算方法。复制代码如下:使用系统;使用系统。Linq使用系统。Web使用系统。网络服务;使用系统。网络服务协议;使用系统。Xml . Linq[Web服务(命名空间=' http://tempuri.org/')] [web服务绑定(conformsto=wsiprofiles . basicprofile 1 _ 1)]//要允许使用ASP.NET Ajax从脚本调用此Web服务,请取消对以下行的注释。//[系统。web . script . services . script service]公共类服务:系统。web . services . web service { public service(){//如果使用设计好的组件,请取消对以下行的注释//InitializeComponent();}///[WebMethod]//公共字符串HelloWorld() //{ //返回' Hello World ';//}[WebMethod(Description=' summary method ')]公共双加(double I,double j){ return I j;}[WebMethod(Description=' different method ')]public double减法(double I,double j){ return I-j;} [WebMethod(Description='求积法')]公共双乘法(双I,双j){ return I * j;} [WebMethod(Description='求商的方法')]公双除(双I,双j) {if (j!=0)返回I/j;否则返回0;}}复制代码如下:使用系统;使用系统。Linq使用系统。Web使用系统。网络服务;使用系统。网络服务协议;使用系统。Xml . Linq[Web服务(命名空间=' http://tempuri.org/')] [web服务绑定(conformsto=wsiprofiles . basicprofile 1 _ 1)]//要允许使用ASP.NET Ajax从脚本调用此Web服务,请取消对以下行的注释。//[系统。web . script . services . script service]公共类服务:系统。web . services . web service { public service(){//如果使用设计好的组件,请取消对以下行的注释//InitializeComponent();}///[WebMethod]//公共字符串HelloWorld() //{ //返回' Hello World ';//}[WebMethod(Description=' summary method ')]公共双加(double I,double j){ return I j;}[WebMethod(Description=' different method ')]public double减法(double I,double j){ return I-j;} [WebMethod(Description='求积法')]公共双乘法(双I,双j){ return I * j;} [WebMethod(Description='求商的方法')]公双除(双I,双j) {if (j!=0)返回I/j;否则返回0;}}运行时可以看到我们自己的可以调用的方法,如下图所示:

再次点击加法方法,进入加法方法调用页面。

在参数上面输入参数I=3和j=3,如上图,点击调用,可以看到以XML格式返回的Web Service结果(I和j相加的结果)。在这里,我们会发现webservice并没有那么神秘,它只是一个接口。对我们来说,重点是编译接口函数。2.3.用ASP.NET呼叫网络服务。首先,打开VS2005。

选择存储位置和语言,然后单击确定进入默认页面。然后添加一个网络引用,将网络服务引入到当前项目中。方法:在资源管理器中右击,选择添加Web引用,弹出对话框:

填写网址,写好WebService运行后浏览器上显示的地址(即WebService发布后的访问地址),点击“Go”按钮,如上图,会显示被引用的WebService中可以调用的方法,然后点击“Add Reference”,webservice会被引用到当前项目中,如下图,导入的WebService文件会出现在解决方案中。

让我们在这里练习调用webservice的四种方法,并做一个简单的调用示例。首先,在网站的前台添加几个控件。代码如下:复制代码的代码如下:% @ page language=' c# ' autoeventreup=' true ' codefile=' default . aspx . cs ' inherits=' _ default ' %!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www . w3 . org/TR/XHTML 1/DTD/XHTML L1-transition . DTD ' html xmlns=' http://www . w3 . org/1999/XHTML ' head runat=' server ' title no title Page/title/head body form ID=' form 1 ' runat=' server ' divasp 3360 extbox ID=' num 1 ' runatDOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN ' ' http://www . w3 . org/TR/XHTML 1/DTD/XHTML L1-Transitional . DTD ' html xmlns=' http://www . w3 . org/1999/XHTML ' head runat=' server ' title no title page/title/head body form ID=' form 1 ' runat=' server ' divasp 3360 extbox ID=' num 1 ' runat在调用之前,就像使用其他对象一样,应该先实例化它。实例化方法是localhost . service a=new localhost . service();然后,您可以通过访问网络服务中提供的方法。后台代码如下:运行后可以看到效果。如下图所示,在前两个文本框中输入两个操作数,在中间的下拉列表中选择运算符,然后单击“=”将计算结果输出到第三个文本框。

虽然整个计算不是在本地执行的,但它是在网络服务器上执行的,结果通过XML返回给调用者。因此,在运行该程序时,还必须启动WebService程序,否则会报告远程服务器无法连接的异常,如下图所示:

后台代码如下:复制代码代码如下:使用系统;使用系统。配置;使用系统。数据;使用系统Linq .使用系统网络.使用系统。网络安全;使用系统网络。用户界面使用系统网络。UI。HtmlControls使用系统。网络控件;使用系统。网页组件;使用系统Xml。Linq公共部分类_默认:系统网络。ui。页面{受保护的无效页面_加载(对象发送者,事件参数e)} {受保护的无效按钮1 _ Click(对象发送者,事件参数e) {字符串选择标志=选择操作.价值;本地主机服务网站=新的本地主机service();如果(选择标志.等于(""){结果正文=(网页.加法(双.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于('-'){结果文本=(网页。减法(双倍.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于(' *)){结果文本=(网页。乘法(双倍.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于('/'){结果正文=(网页.分部(双.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} } } 复制代码代码如下:使用系统;使用系统。配置;使用系统。数据;使用系统Linq .使用系统网络.使用系统。网络安全;使用系统网络。用户界面使用系统网络。UI。HtmlControls使用系统。网络控件;使用系统。网页组件;使用系统Xml。Linq公共部分类_默认:系统网络。ui。页面{受保护的无效页面_加载(对象发送者,事件参数e)} {受保护的无效按钮1 _ Click(对象发送者,事件参数e) {字符串选择标志=选择操作.价值;本地主机服务网站=新的本地主机service();如果(选择标志.等于(""){结果正文=(网页.加法(双.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于('-'){结果文本=(网页。减法(双倍.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于(' *)){结果文本=(网页。乘法(双倍.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} else if (selectFlag .等于('/'){结果正文=(网页.分部(双.解析(数字1 .文本),双。解析(Num2 .文本))。ToString();} }}到此一个一个简单的WebService的开发和调用就已经完成了,在实际应用中可以根据自己的需要,写一些功能强大的,复杂的WebService,不管多么复杂,整个流程都是这样的。

版权声明:介绍php如何调用webservice应用程序是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。