没有合适的资源?快使用搜索试试~ 我知道了~
多语言调用WebService技术文档.doc
1 下载量 47 浏览量
2023-08-15
10:07:29
上传
评论
收藏 155KB DOC 举报
温馨提示
试读
28页
内容概要:代码示例 C++调用WebService,Java调用WebService,C#调用WebService,Js调用WebService,VB调用WebService,ASP调用WebService,PHP调用WebService。 适用人群:WebService开发人员 使用场景:跨平台WebService调用 目标:通过本资源学习,快速上手学会WebService调用技术,并掌握多语言平台下,多种调用方式,解决实际工作问题。
资源推荐
资源详情
资源评论
1. 什么是 webservice
从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过 Web 进行
调用的 API。这就是说,你能够用编程的方法通过 Web 来调用这个应用程序。
对 Web service 更精确的解释: Web services 是建立可互操作的分布式应用程序的新平
台。作为一个 Windows 程序员,你可能已经用 COM 或 DCOM 建立过基于组件的分布式
应用程序。COM 是一个非常好的组件技术,但是我们也很容易举出 COM 并不能满足要求
的情况。Web service 平台是一套标准,它定义了应用程序如何在 Web 上实现互操作性。
你可以用任何你喜欢的语言,在任何你喜欢的平台上写 Web service ,只要我们可以通过
Web service 标准对这些服务进行查询和访问。
不管你的 Web service 是用什么工具,什么语言写出来的,只要你用 SOAP 协议通过 HTT
P 来调用它,总体结构都应如下图所示。通常,你用你自己喜欢的语言(如 VB 6 或者 VB.NET)
来构建你的 Web service,然后用 SOAP Toolkit 或者.NET 的内建支持来把它暴露给 We
b 客户。于是,任何语言,任何平台上的客户都可以阅读其 WSDL 文档,以调用这个 Web
service。客户根据 WSDL 描述文档,会生成一个 SOAP 请求消息。Web service 都是
放在 Web 服务器 (如 IIS) 后面的,客户生成的 SOAP 请求会被嵌入在一个 HTTP POST
请求中,发送到 Web 服务器来。Web 服务器再把这些请求转发给 Web service 请求处理
器。对 VB 6 程序来说,Web service 请求处理器是一个与 SOAP Toolkit 组件协同工作
的 ASP 页面或 ISAPI extension。而对 VB.NET 程序来说,Web service 请求处理器则
是一个.NET Framework 自带的 ISAPI extension。请求处理器的作用在于,解析收到的
SOAP 请求,调用 Web service,然后再生成相应的 SOAP 应答。Web 服务器得到 SOAP
应答后,会再通过 HTTP 应答的方式把它送回到客户端。
2. 基本概念
SOAP
Web service 建好以后,其他人就会去调用它。简单对象访问协议(SOAP)提供了标准的远
程过程调用( RPC)方法来调用 Web service。SOAP 规范定义了 SOAP 消息的格式,以及
怎样通过 HTTP 协议来使用 SOAP。SOAP 也是基于 XML 和 XSD 的,XML 是 SOAP 的数
据编码方式。客户端和服务端之间的方法调用请求和结果返回值都放在这些消息里。
XML 和 XSD
可扩展的标记语言(XML)是 Web service 平台中表示数据的基本格式。除了易于建立和易
于分析外,XML 主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优
越性更重要的。XML 解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有
说怎么去扩展这套数据类型。例如,整形数到底代表什么?16 位,32 位,还是 64 位?这
些细节对实现互操作性都是很重要的。W3C 制定的 XML Schema(XSD)就是专门解决这
个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。
Web service 平台就是用 XSD 来作为其数据类型系统的。当用某种语言(如 VB.NET 或 C
#)来构造一个 Web service 时,为了符合 Web service 标准,所有使用的数据类型都必
须被转换为 XSD 类型。
WSDL(Web Services Description Language)
用于描述服务端所提供服务的 XML 格式。WSDL 文件里,描述了服务端提供的服务,提供
的调用方法,以及调用时所要遵循的格式,比如调用参数和返回值的格式等等。WSDL 很
像 COM 编程里的 IDL(Interface Description Language),是服务器与客户端之间的契
约,双方必须按契约严格行事才能实现功能。
WSML(Web Services Meta Language)
用于描述 WSDL 里提供的方法与实现该方法的 COM 对象之间的映射关系。该文件是 Micr
osoft 的实现中特有的,不是 SOAP 标准的一部分。一般情况下,该文件只在服务端存在。
3.Webservice 的技术特点
长项一: 跨防火墙的通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将
是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。在这种情况
下,使用 DCOM 就不是那么简单,通常也不便于把客户端程序发布到数量如此庞大的每一
个用户手中。传统的做法是,选择用浏览器作为客户端,写下一大堆 ASP 页面,把应用程
序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。
举个例子,在应用程序里加入一个新页面,必须先建立好用户界面(Web 页面),并在这个
页面后面,包含相应商业逻辑的中间层组件,还要再建立至少一个 ASP 页面,用来接受用
户输入的信息,调用中间层组件,把结果格式化为 HTML 形式,最后还要把“结果页”送回
浏览器。要是客户端代码不再如此依赖于 HTML 表单,客户端的编程就简单多了。
如果中间层组件换成 Web Service 的话,就可以从用户界面直接调用中间层组件,从而省
掉建立 ASP 页面的那一步。要调用 Web Service,可以直接使用 Microsoft SOAP Toolkit
或.NET 这样的 SOAP 客户端,也可以使用自己开发的 SOAP 客户端,然后把它和应用程
序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。
同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的“结果页”。
从经验来看,在一个用户界面和中间层有较多交互的应用程序中,使用 Web Service 这种
结构,可以节省花在用户界面编程上 20%的开发时间。另外,这样一个由 Web Service
组成的中间层,完全可以在应用程序集成或其它场合下重用。最后,通过 Web Service 把
应用程序的逻辑和数据“暴露”出来,还可以让其它平台上的客户重用这些应用程序。
长项二: 应用程序集成
企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行
的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需要从运行在 IBM
主机上的程序中获取数据;或者把数据发送到主机或 UNIX 应用程序中去。即使在同一个
平台上,不同软件厂商生产的各种软件也常常需要集成起来。通过 Web Service,应用程
序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用。
例如,有一个订单登录程序,用于登录从客户来的新订单,包括客户信息、发货地址、数量、
价格和付款方式等内容;还有一个订单执行程序,用于实际货物发送的管理。这两个程序来
自不同软件厂商。一份新订单进来之后,订单登录程序需要通知订单执行程序发送货物。通
过在订单执行程序上面增加一层 Web Service,订单执行程序可以把“Add Order”函数“暴
露”出来。这样,每当有新订单到来时,订单登录程序就可以调用这个函数来发送货物了。
长项三: B2B 的集成
用 Web Service 集成应用程序,可以使公司内部的商务处理更加自动化。但当交易跨越供
应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做 B2B 集成。
Web Service 是 B2B 集成成功的关键。通过 Web Service,公司可以把关键的商务应用
“暴露”给指定的供应商和客户。例如,把电子下单系统和电子发票系统“暴露”出来,客户就
可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购发票。当然,这并不
是一个新的概念, EDI(电子文档交换)早就是这样了。但是,Web Service 的实现要比 EDI
简单得多,而且 Web Service 运行在 Internet 上,在世界任何地方都可轻易实现,其运
行成本就相对较低。不过,Web Service 并不像 EDI 那样,是文档交换或 B2B 集成的完
整解决方案。Web Service 只是 B2B 集成的一个关键部分,还需要许多其它的部分才能实
现集成。
用 Web Service 来实现 B2B 集成的最大好处在于可以轻易实现互操作性。只要把商务逻
辑“暴露”出来,成为 Web Service,就可以让任何指定的合作伙伴调用这些商务逻辑,而
不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在 B2B 集成
上的时间和成本,让许多原本无法承受 EDI 的中小企业也能实现 B2B 集成。
长项四: 软件和数据重用
软件重用是一个很大的主题,重用的形式很多,重用的程度有大有小。最基本的形式是源代
码模块或者类一级的重用,另一种形式是二进制形式的组件重用。
当前,像表格控件或用户界面控件这样的可重用软件组件,在市场上都占有很大的份
额。但这类软件的重用有一个很大的限制,就是重用仅限于代码,数据不能重用。原因在于,
发布组件甚至源代码都比较容易,但要发布数据就没那么容易,除非是不会经常变化的静态
数据。
Web Service 在允许重用代码的同时,可以重用代码背后的数据。使用 Web Service,再
也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只
需要直接调用远端的 Web Service 就可以了。举个例子,要在应用程序中确认用户输入的
地址,只需把这个地址直接发送给相应的 Web Service,这个 Web Service 就会帮你查
阅街道地址、城市、省区和邮政编码等信息,确认这个地址是否在相应的邮政编码区域。Web
Service 的提供商可以按时间或使用次数来对这项服务进行收费。这样的服务要通过组件
重用来实现是不可能的,那样的话你必须下载并安装好包含街道地址、城市、省区和邮政编
码等信息的数据库,而且这个数据库还是不能实时更新的。
另一种软件重用的情况是,把好几个应用程序的功能集成起来。例如,要建立一个局域网上
的门户站点应用,让用户既可以查询联邦快递包裹,查看股市行情,又可以管理自己的日程
安排,还可以在线购买电影票。现在 Web 上有很多应用程序供应商,都在其应用中实现了
这些功能。一旦他们把这些功能都通过 Web Service “暴露”出来,就可以非常容易地把所
有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。
将来,许多应用程序都会利用 Web Service,把当前基于组件的应用程序结构扩展为组件
/Web Service 的混合结构,可以在应用程序中使用第三方的 Web Service 提供的功能,
也可以把自己的应用程序功能通过 Web Service 提供给别人。两种情况下,都可以重用代
码和代码背后的数据。
4.如何调用 webservice
4.0 webservice 的调用过程
客户端:取得服务端的服务描述文件 WSDL,解析该文件的内容,了解服务端的服务信
息,以及调用方式。根据需要,生成恰当的 SOAP 请求消息(指定调用的方法,已经调用
的参数),发往服务端。等待服务端返回的 SOAP 回应消息,解析得到返回值。
服务端:生成服务描述文件,以供客户端获取。接收客户端发来的 SOAP 请求消息,解析
其中的方法调用和参数格式。根据 WSDL 和 WSML 的描述,调用相应的 COM 对象来完成
指定功能,并把返回值放入 SOAP 回应消息返回给用户。
高层接口
使用高层接口,不需要知道 SOAP 和 XML 的任何信息,就可以生成和使用一个 WebSer
vice。Soap Toolkit 2.0 通过提供两个 COM 对象――SoapClient 和 SoapServer,来完
成这些功能。
在客户端,只需要生成一个 SoapClient 实例,并用 WSDL 作为参数来调用其中的 mss
oapinit 方法。SoapClient 对象会自动解析 WSDL 文件,并在内部生成所有 Web Service
的方法和参数信息。之后,你就可以像调用 IDispatch 接口里的方法一样,调用里面所有
的方法。在 VB 或是脚本语言里,你甚至可以直接在 SoapClient 对象名后面直接加上.方
法(参数…)进行调用。
低层接口
要使用低层接口,你必须对 SOAP 和 XML 有所了解。你可以对 SOAP 的处理过程进行
控制,特别是要做特殊处理的时候。
在客户端,首先要创建一个 HttpConnector 对象,负责 HTTP 连接。设定 Connector 的
一些头部信息,比如 EndPoinURL 和 SoapAction 等。如果网络连接需要使用代理服务器,
那也要在这里设定相关的信息。接着创建 SoapSerializer 对象,用于生成 Soap 消息。按
照 WSDL 里定义,把所有参数按顺序序列化,得到一个完整的 SOAP 请求消息。该 Soap
消息,作为 Payload 通过 HttpConnector 被发送到服务端。最后,生成一个 SoapReader
对象,负责读取服务端返回的 SOAP 消息,取得其中的返回值。
4.1 使用 PowerBuilder 调用
适用版本 8.0 需下载 Bulletin Web Services Toolkit 4.1
4.2 使用 java 调用
需要下载 apache soap。下载地址:http://xml.apache.org/soap/index.html
导入:
import org.apache.soap.*;
import org.apache.soap.rpc.*;
例程:
import java.io.*;
import java.util.*;
import java.net.*;
import org.w3c.dom.*;
import org.apache.soap.util.xml.*;
import org.apache.soap.*;
import org.apache.soap.encoding.*;
import org.apache.soap.encoding.soapenc.*;
import org.apache.soap.rpc.*;
import org.apache.soap.transport.http.SOAPHTTPConnection;
public class testClient {
public static void main(String[] args) throws Exception {
URL url = new URL ("http://192.168.0.4/yundan/service1.wsdl");
//改成你的地址
SOAPMappingRegistry smr = new SOAPMappingRegistry ();
StringDeserializer sd = new StringDeserializer ();
smr.mapTypes (Constants.NS_URI_SOAP_ENC, new QName ("", "Result
"), null, null, sd);
// 创建传输路径和参数
SOAPHTTPConnection st = new SOAPHTTPConnection();
// 创建调用
Call call = new Call ();
call.setSOAPTransport(st);
call.setSOAPMappingRegistry (smr);
call.setTargetObjectURI ("http://tempuri.org/message/");
call.setMethodName("addNumbers");
call.setEncodingStyleURI ("http://schemas.xmlsoap.org/soap/encoding/
");
Vector params = new Vector();
params.addElement(new Parameter("NumberOne", Double.class, "10",
null));
params.addElement(new Parameter("NumberTwo", Double.class, "25",
null));
call.setParams(params);
Response resp = null;
try {
resp = call.invoke (url, "http://tempuri.org/action/Hello2.addNumbers")
;
}
catch (SOAPException e) {
System.err.println("Caught SOAPException (" + e.getFaultCode () + "):
" + e.getMessage ());
return;
}
// 检查返回值
if (resp != null && !resp.generatedFault()) {
Parameter ret = resp.getReturnValue();
Object value = ret.getValue();
剩余27页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功