在看这篇教程前,请记住下面的几个术语:
CFMX(MM公司的Server-side端服务器,以CFM TAG为脚本语言)
CFC (coldfusionmx的组件文件)
XML(可扩展性标识语言)
WSDL(Web 服务描述语言)
SOAP(简单对象访问协议)
F2K4除了推出AS2.0之外,其实还有一个大手笔就是数据绑定(DataBind),当你打开组件面板时你会发现WebServiceConnector这个组件,它是基于WebService Class里的一员它作什么用。它就是用来绑定WebService的WSDL文档的,并且利用它可以和别的组件进行数据绑定,实现内外数据交互。
什么是WEBservice?什么是wsdl?
WebService是建立可互操作的分布式应用程序平台,有点难懂是吧。打个比方,有个电子商务网站提供在线货物清单查询销售的服务,或一家研究所有个DNA的数据库查询服务。现在N多家网站或企业可以通过签订协议使用这个服务。这就是WEBService。而它采用的就是一个国际的标准用于生成和解读交互服务。这个标准其实就是一个标准化的XML,而它就叫做wsdl,用标准统一的XML格式给用户能正确解读使用。所以包括任何一种后台服务端语言都能生成和读取wsdl(几乎所有脚本语言都支持。比发ASP,ASP.NET,PHP,C#,JAVA,CF.....)讲到这里大家就想到了IBM的电子商务服务。其实IBM就是推对wsdl标准的老大。
点下面看一个wsdl文档就明白了其实就是XML文件,但是它是有了标准协定的XML文件。TemperatureService.wsdl
大家都知道Remoting和FireFly吧。这是FLASH用于与后端数据交互的中间件,而wsdl也可以起相同的作用。而不用中间件。任何一种后台语言都能生成并且与FLASH交互。而Remoting如果要支持除CF之外的别的语言开发,还得安装支持语言包。这也就是为什么F2K4里没找到Remoting 针对AS2.0的组件。FireFly嘛就更惨了,已经给DataBind组件所代替(当然,其实我也很喜欢这两个东东,必竟学会的东东。不希望这么快就失去主流的地位)
F2k4力推Databind组件,一个最重要的原因,就是SOAP。
什么是 SOAP?
W3C正版的话:
SOAP 是一个为业界所接受的 W3C 规范,它用于描述消息(XML 文档及其附件),使消息可以在网络上被发送。
在协议栈中,SOAP XML 协议位于用于发送消息的传输协议的上方,并位于特定于域的 XML 文档的下方。
盗版的土话:
其实就象HTTP一样。是一种网络传送协议。只是它针对的是XML,而且是一种自动推数据技术。它使你能够发送和接收 XML 文档而无需考虑传输协议或你将发送的 XML 文档的结构。
MM公司最看中的话:
最流行的绑定(binding)技术是使用简单对象访问协议(SOAP),做.NET开发的朋友,对Databinding 和SOAP一定更有体会,现在明白为什么F2k4这么多绑定组件了吧。无论是XMLConnector还是WebServiceConnector,都利用SOAP协议与XML进行交互。MM公司为什么这么看中DATABIND。因为了它除了FW,DW,FL三剑客之外。还有两个大东西,JRUN4和COLDFUSIONMX 两个Server-Side服务器。所以它既有JAVA开发语言又有CF开发,当然要跟上时代潮流罗。
好了,基本概念已经说完。如果还不懂。请查找相关资料。
这里有一个我用FLASH2004做的调用远端WebService的 wsdl文档的简单图例:
调用的是MSN香港站的一个全国城市天气预报的WebService wsdl文档

这里要提醒一个,调用远端的wsdl,要在对方服务器里写一个crossdomain.xml,这是一个跨域协议通过的文档。主要是FLASH7.0针对读取外部文件有专门的安全要求。除了给对方做crossdomain.xml文件,还有一种方法就是利用你的服务器端脚本语言作个代理脚本。关于跨域安全的介绍和解决方法。MM站点的在线资料里有详细介绍,这里不说了。我写这个教程,主要是教你用CFMX开发自己的WEBService建立wsdl文档。
如果你要学下面的教程,你要准备下例要求:
FLASHMX2004
COLDFUSION MX 6.1
XMLSPY 2004 (这是一个写XML文档的好工具。用来分析WSDL文档结构很方便,如果没有也不要紧)
你对CFMX,XML,FLASH 有一定的掌握。
好了。打字打得累了。偶逃班回来,先写个介绍吧。我准备了两个实例,得整理一下图片。如果你对FLASHMX WebService运用感兴趣请在回贴告诉我,或是对我写的错误的地方请指正。如果你有什么要求也提出来。我喝口水休息会
我们已经对wsdl和webservice有所了解了.至少知道它是作什么和怎么运作。
现在要学怎么建立一个wsdl文档实现webservice.做wsdl最方便的就Coldfusion了
因为他的TAG都是集成化的。我们只要写一个cfc组件文件,通过CFMX的自动解析就能生成wsdl文档.讲完CFMX的基本运用。如果大家有兴趣,我还介绍点基于.NET建立FLASH WEBSERVICE运用.相比之下。选择CFMX是最快最简单的.好费话少说。
边讲例子边学,第一个例子是基础,让你了解CF怎么生成wsdl,和wsdl的结构,并利用结构,让FLASH进行调用。
我要做一个WebService,给人家提供一个自动转换显示ASC代码的功能。让人家能调用我的这个服务。
例图:
源码下载
首先建立一个WEB目录 cftest,然后建立CF组件文件取名为toasc.cfc
cfc文件是生成wsdl文档的关键,代码如下:
[code]
returnType="string"
access="remote">
[code]
懂cf的人一眼就看出来.这是一个组件的基本写法。
建立和定义一个组件对象
建立一个组件的函数和请求事件
(name是这个函数名, returnType 函数值返回时的类形这时我们定义为string,access是指调用方法这里remote指被远程文件调用)
为组件函数建立一个默认参数,这里定义为name为num1。类形为string;
就是这个函数要执行的程序了.sumt等于ASC()作用是转换name参数num1为asc码
执行函数后返回变量sum
好我们的组件文件写完了,现在要生成wsdl文档了.CFMX生成wsdl很简单.
在ie上输入你cfc文件的Web地址在后面加上?wsdl.
localhost/cftest/toasc.cfc?wsdl
过一会就会在IE里显示出一个格式好的wsdl文档.这是由CFMX自动生成的。
现在就要在这一大堆XML代码里找出我们要的这个文档的标准定义
根据前面写的组件函数,我们只要找三个定义标准,
一个请求值,一个返回值,和一个执行方法。
这是很重要的。也是wsdl的基础.如果一时看不太明白下课后请去W3C看看
wsdl的详细标准定义文档.
| 以下内容为程序代码: - - - - |
我们去掉头文件等一些标准定义和后面的SOAP请求.,我们取出上面这段分析。
这是CFC生成的XML,前面我们的CFC函数有个定义了的参数name = num1,在xml文档里有个message对话
| 以下内容为程序代码: 这是一个num1请求执行SOAP对话 |
这是一个Response的要求SOAP返回请求的值的对话.
| 以下内容为程序代码: - |
这里定义了一个执行方法.portType 名为toasc,执行input 和output服务.
分析完成,wsdl国际标准都是 方法名字在portType节里找得到.message对话里能找到请求和返回的名字,这都是根据我们的CFC生成的.如果你得到一份别人wsdl,就要分析他的请求,返回,执行方法,一般大型的商务公司提供的wsdl会提供一份分析表给你.因为.大形的WebService会有N多请求返回执行方法包含在wsdl文档中.甚至有rray,object,querybean等其它子集形式。这里不展开说。请仔细看W3C或IBM的wsdl标准定义方法。
你也可以使用能分析wsdl的工具,更直观。
如图下面使用的XMLSPY2004分析的,portType,request,response都分开显示出来

好了现在开始FLASH了。
建立一个fla,放入一个WebServiceConnectior组件取名为myservice
放一个button取名为bu,放入一个Label取名为rsq 放入一个inputtext取名为num

点名为myservice的WebServiceConnectior组件,在ComponentInspector面板上如下图设置:WSDLURL 里输入 localhost/cftest/toasc.cfc?wsdl
operation 里选择 toasc
(这个是自动搜索的,如果你的wsdl有多个执行方法.都会列出.这就要根据你对wsdl的请求和返回的分析选择所要的执行方法了,这里我们只有一个toasc方法)

点Schema tab,出现了toasc方法的 num1请求参数和返回results

现在我们要做的就是绑定数据到别的组件上了,点Bindings Tab,点加号。选择一个Binding对象如图:
我们先选请求的num1对象.然后点加号再选results返回值对象.

返回Bindings tab后.点params.num1,在面板的direction(方向)选in,因为num1是一个请求wsdl执行方法的的对象.点bound to(绑住)边上的小放大镜.出现影片组件选择.我们选择名为num的inputtext


现在我们再同上绑定results返回值对象于名为rsq的Label组件。不同的是direction(方向)选out.因为这是一个返回执行方法值的对象。

最后在你的影片的第一帧写上以下代码用来执行Button和Webservice服务调用:
| 以下内容为程序代码: var obj = new Object() obj.click = function() { myservice.trigger() } bu.addEventListener("click",obj); |
好了.现在可以发布你的影片了。输入一个字符会得到相对的ASC码,这个例子很简单,
其实用FLASH就能实现.IBM大力开发wsdl就只能做这种傻事?:)
这个例子只是介绍你认识和学会分析WSDL,并且知道CFC是怎么产生WEB服务的基础..这是最基本的.下一节.我就要讲得深入点了.如果你有没看明白.或认为错识的地方.
请指正.留言给在这里.或我的BLOG
- 最近更新
