现在位置:首页->学习专题->Flash/Flv
flash remoting实践
作者: 日期: 2007-10-30 12:00:28 访问次数:出处:
 显示选项:自动滚屏[左键停止]

把自己在学习flashremoting中的一些感受和经验教训和大家一起分享,同时由于本人是初学flashremoting,所以如果有错误的地方,还请各位大侠指正

这篇是关于flashremoting的配置方面的,其实大部分是有几位高人所传授的知识,在这里特别感谢icastone大侠。

icastone大侠千万不要说我侵权啊,呵呵!!!

一.net环境下配置flashremoting:
1.下载所需要的软件包括flashremotingMX2004(以下简称remoting)组件,支持as2.0的,以前的remoting是不支持中文flash的,但是现在已经提供支持中文flash了,请到官方网站下载最新的版本,然后,需要下载,flashremoting for .net,同时你还需要有iis5.0以上版本,和.net framework1.1,如果没有请到相关网站去下载好了,.net环境下所需要东东已经齐全了。

注意.net framework最好是完全版的,不要下载分发包。

2.首先安装好.net的环境,先安装iis,然后安装.net framework的sdk,这些装好后,开始安装flashremoting for .net(默认情况下,会安装在iis虚拟目录下(c:\Inetpub\wwwroot\flashremoting),然后请安装remoting组件(注意:一定要在flash刚安装完毕之后安装remoting组件,如果不是,请先卸载flash和相关文件夹,然后重新安装)。

3.安装好之后,先看一下c:\Inetpub\wwwroot\flashremoting的内容,这里有几个是比较重要的,其中包括gateway.aspx,web.config和bin目录下的flashgateway.dll,和frconfig.txt这几个文件,下一篇讲具体的用法。之后打开flash,可以在组件面板处的data components里看到remotingconnector组件,在窗口/其他面板/公用库 里看到remoting,这是所需要的如果没有,那么要确定,你的remoting组件是不是支持中文flash的,并且是不是在flash安装之后就安装了remoting组件。

4.测试samples下的文件,先测试前两个文件(也就是ado和asp的那两个例子,这里有ado和ado_vb之分,ado是用c#写的,ado_vb是用vb.net写的,但内容是一样的),在这里有许多人都说在测试的时候总是总是停留在load页面,这里的解决办法是首先打开计算机管理页面,右键我的电脑,选择管理/服务和应用程序/internet信息服务(IIS)管理器/网站/默认网站(默认的虚拟目录是c:\Inetpub\wwwroot,如果不是请重新指定到这个目录),右键选择flashremoting选择属性,复选目录浏览,单击创建(E),执行权限里选择"纯脚本",点击确定,之后你会看到你的flashremoting目录已经变了,进入flashremoting/samples/ado,右键单击default.htm,选择浏览,测试会成功。

5.关于第三个例子webservice,我也没测试成功,原因我的.net framework可能是分发包,如果你确定你下载的是完全版的话,如果测试不成功,我把我在网上找的相关解决办法告诉大家,首先给flashremoting目录下的bin目录写入的权限(右键单击bin目录选择权限,添加一个asp.net帐户,然后给他写入的权限),如果不行的话,把wsdl.exe拷贝到bin目录下,给予asp.net写入权限之后重新启动iis,这是我找到的几种解决方法,由于我是拨号上网,我没有办法下载.net framework的完全版,所以这个我没有测试,祝你成功!!!

二.java环境下配置flashremoting:

1.你能够使用remoting从一个flash应用程序里的actionscript去呼叫在java应用程序服务器上运行的java对象公共方法,

remoting支持以下java对象类型
JavaBeans
Java classes
Enterprise JavaBeans(ejb)
jsp
Java Management Extensions(JMX)MBeans;这个只能利用在jrun4里
server-side ActionScript(SSAS)(这些是翻译的help)
remoting明确的支持JRUN 4.0,IBM WebSphere Spplication Server 4,BEA WebLogic,Sun ONE Web Server,remoting也会正确的运行在其他的J2EE应用程序服务器上,包括Caucho Resin, Tomcat, JBoss, ATG Dynamo, Oracle 9i AS, HP Application Server(这个是翻译的flash rmoting:the definitive guide,呵呵)

2.这里由于我只是初学java所以我只能找简单的,就是jrun服务器(嘿嘿,因为jrun安装之后就已经集成了remoting,稍后我会把相关配置java其他服务器的资料翻译出来)因为我手头没有其他的服务器,所以如果你用的不是jrun服务器,那么你要查相关服务器的配置方法

3.在jrun服务器里建立一个你自己的服务,在开始/所有程序,macromedia jrun4里选择jrun管理控制台,之后需要你添入用户名和密码,这个是在你安装jrun时你输入的,进入页面之后你会看到jrun已经为你建了3个服务器,分别是admin,default,samples,他们分别在不同的端口上运行,如果你想运行admin上的程序,那么你就要输入localhost:8000 新建一个服务器选择左上角的create new server,在jrun server name里输入名字,例如

flashremoting,然后点击一下jrun server directory它会自动为你配置程序的目录然后选择create server之后会显示一些新的服务器的端口号等信息,如果你不想更改的话,可以点finish就可以了,之后找到你的jrun安装目录在servers目录里你会看到你新创建的flashremoting文件夹。

配置方面的知识,我就先写到这了,下一篇文章是简单的hello world程序,稍后在发,如果有什么错误希望高手指正。

如有问题,请与我联系,我的qq:22339146,msn:lwanchen@hotmail.com

如果转载请标明作者。

下面来教大家在.net环境下写最简单的hello world,好了闲话少说,现在开始:

这里我假设你已经看过我第一篇关于配置的文章,并已经成功的执行了前两个例子。

1.首先请大家进入你的虚拟目录c:\Inetpub\wwwroot,在这里你会看到flashremoting文件夹,也就是例子文件的文件夹,在这个目录新建一个myASPApp文件夹,这里我们开发的程序就放到这个文件夹下,在这里我们新建一个名为bin的目录,建好之后请回到c:\Inetpub\wwwroot,进入flashremoting目录,把这里的bin目录下的flashgateway.dll和frconfig.txt文件拷贝到myASPApp下的bin目录里,然后在把flashremoting下的gateway.aspx和web.config两个文件拷贝到myASPApp目录下,在这里我不具体介绍为什么我们要把这些文件拷贝到相应的目录里,如果你想了解请看自带的帮助文件remoting支持4种.net技术分别是:

asp.net
ado.net data-binding
web services
assembly(with the .dll extension)

要让我们写的remoting程序能够找到asp.net页你就必须把asp.net页放到虚拟目录下或者是子目录下,也就是我们为了区分我们要开发的项目所以我们在虚拟目录下建了一个myASPApp文件夹,我们把我们需要的asp.net放到这里就可以了。好了,下面我们开始写程序了。

2.在myASPApp下建立一个.aspx文件,也就是asp.net文件取名为helloWorldNET.aspx
首先要把你用的是什么语言做声明,我这里用的是vb.net写法是

<%@ Page language="vb" debug="true" %>

为了从flash应用程序中调用数据,或者在asp.net页面返回结果给flash,你要在asp.net页面上使用flash remoting定制服务器端控制这个控制是又flashgateway.dll所提供的,也就是拷贝到bin目录里的flashgateway.dll,你必须在程序代码之前首先注册这个控制,方法是这段代码

<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway" %>

这个注册说明了建立标识符前缀Macromedia,和命名空间FlashGateway,以及提供功能的动态连接库文件flashgateway注册之后你就可以使用它传递数据给flash应用程序了比如这样


Hello from .NET!

这里我个人认为,在之间写的任何代码都会被做为返回值传递给flash,比较像.net中的response.wirte()和java中的System.out.print();说到这里大家可能已经会写这个程序了,不错上面的代码就是hello world程序,但是这里我不提倡大家这样写,还有另一种写法,在注册完之后直接写这样的代码,然后在下面我们用asp.net的正常写法

这里我们用page_load也就是页面加载时所执行的程序,这样,当这个页面加载时就会把hello world直接传递给flash对象的result方法,这是我们在flash里接收的值的方法,好了asp.net页面已经写完了,下面看一下完整的代码

<%@ Page language="vb" debug="true" %>
<%@ Register TagPrefix="Macromedia" Namespace="FlashGateway" Assembly="flashgateway" %>

3.下面是我们所要写的flash端的代码,这里首先要把remoting类导入到flash中,方法很简单选择菜单栏,窗口--其他面板--公用库--remoting,这时你会看到界面右边出现remoting的库面板,把RemotingClasses拖到场景中在删除,这样RemotingClasses类就会被添加到我们的文件的库里面,程序执行的时候它就被导入到程序里了,如果你想在NetConnection Debugger面板里调试程序,那么你需要把remoting类库里的RemotingDebugClasses也拖到场景中,好了现在开始写as程序

4.拖一个textinput组件到主场景中,取名为messageDisplay_txt,然后选择主场景第一真打开动作面板,首先需要导入一些需要的类代码如下

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;

之后第一步我们要连接服务器所以创建一个service对象代码如下:

var howdyService:Service = new Service("/myASPApp/gateway.aspx", null, "myASPApp", null, null);

第一个参数/myASPApp/gateway.aspx首先指定到虚拟目录下的myASPApp下的gateway.aspx文件,他做一个转向的作用,必须这么写,第三个参数需要指定你的asp.net页在什么地方,这里因为我把helloWorldNET.aspx放到myASPApp目录下所以直接写myASPApp就可以了,但是如果你要把helloWorldNET.aspx放到myASPApp的其他子目录下例如,helloworld目录下,那么你就要写成myASPApp.helloworld。

第二步呼叫服务器端的helloworld方法

var pc:PendingCall = howdyService.helloWorldNET();

这里你会看到呼叫的服务器端的方法其实就是asp.net页helloWorldNET.aspx的名字

第三步需要写呼叫方法后服务器返回的结果和或者是失败的方法

pc.responder = new RelayResponder(this, "serviceFunctionName_Result", "serviceFunctionName_Fault");
这里如果呼叫成功那么执行我们自定义的serviceFunctionName_Result方法,如果呼叫失败那么执行我们自定义的serviceFunctionName_Fault方法。
然后我们要写自定义的两个方法,首先是serviceFunctionName_Result方法,代码如下:

function serviceFunctionName_Result(result:ResultEvent) {
    // display successful result
    messageDisplay_txt.text = result.result;
}

这里当呼叫成功后会把服务器端的结果传递给result对象,result对象的result方法就是从服务器端得到的值,然后我们把他放到messageDisplay_txt里显示
当呼叫失败时flash会调用serviceFunctionName_Fault方法,代码如下:

function serviceFunctionName_Fault(fault:FaultEvent) {
    //display fault returned from service
    messageDisplay_txt.text = fault.fault.faultstring;
}

失败的信息,会传递给fault对象,然后用messageDisplay_txt来显示出来,好了这个程序已经写完了,完整的代码如下:

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
// connect to service and create service object
var howdyService:Service = new Service("/myASPApp/gateway.aspx", null, "myASPApp", null, null);
// call the service helloWorld() method
var pc:PendingCall = howdyService.helloWorldNET();
// tell the service what methods handle result and fault conditions
pc.responder = new RelayResponder(this, "serviceFunctionName_Result", "serviceFunctionName_Fault");
function serviceFunctionName_Result(result:ResultEvent) {
    // display successful result
    messageDisplay.text = result.result;
}
function serviceFunctionName_Fault(fault:FaultEvent) {
    //display fault returned from service
    messageDisplay.text = fault.fault.faultstring;
}

看完之后大家是不是觉得调用.net方法其实很简单,不错,as代码方面其实写法比较固定,只要正确的找到gateway.aspx文件引导,然后正确的找到你所写的asp.net页,应该就没有什么问题。在这里我注重把as2.0的写法告诉大家,并没有对每一个对象例如Service,PendingCall等对象做细致的讲解,如果你想仔细的认识这些对象那么请看相关资料

下一节将会向大家介绍java环境下的hello world程序,我会努力的已最快速度写出来的,由于时间仓促,所以难免有写的不对的地方,如果写错了,请大家指正,如果想与我讨论remoting方面的问题的请与我联系我的qq:22339146,msn:lwanchen@hotmail.com。

⊕相关文章
  • ·基于Flash Media Server的Flash多人涂鸦白板
  • ·Flash Media Server 2的功能
  • ·如何转换视频为flv文件过程记录
  • ·良好的FCS编程习惯
  • ·Flash8 FLVplayback组件
  • ·连网数据同步