Java for Flash动态网站开发手札
里介绍的FlexRemoting使用很方便,但是flex里没有mx.remoting.Service类,而且FlexRemoting那里,文档只推介绍它的FlexDataServer来进行数据访问,好贵的东西。虽然flex的关方文档着重用它自家的服务器来提供完整的解决方案,其实Flex里还是保留了flash包,利用第三方的网关也能很好的解决flex和server的数据访问,无论使用ASP,PHP还是Ruby。
我用采取的是AMFNET+ASP.Net,下面是Flex代码
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
下面是RemotingConnection类的代码REmotingConnection.as
package
{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingConnection extends NetConnection
{
public function RemotingConnection( sURL:String )
{
objectEncoding = ObjectEncoding.AMF0;
if (sURL) connect( sURL );
}
public function AppendToGatewayUrl( s : String ) : void
{
//
}
}
}
{
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
public class RemotingConnection extends NetConnection
{
public function RemotingConnection( sURL:String )
{
objectEncoding = ObjectEncoding.AMF0;
if (sURL) connect( sURL );
}
public function AppendToGatewayUrl( s : String ) : void
{
//
}
}
}
可以看出NetCOnnection类代替了Flash8里的Server类。
AMFNET
的设置非常简单,只需要一个在web.config里添加一个httpHandler和一个gateway.aspx文件即可。
<httpHandlers>
<add verb="*"
path="gateway.aspx"
type="Fuel.AmfNet.GatewayHandler, Fuel.AmfNet"/>
</httpHandlers>
<add verb="*"
path="gateway.aspx"
type="Fuel.AmfNet.GatewayHandler, Fuel.AmfNet"/>
</httpHandlers>
httpHandler意思是只要请求gateway.aspx就将传入的请求映射到Fuel.AmfNet.GatewayHandler来处理。但是AMFNET是一个轻量级的网关,从源代码来看,只能对Number,String,Boolean,Array,Date,Object,XMLDocument进行互相转换。不过代码预留有MovieClip,RecordSet的接口,相信以后的版本肯定是要把它们都完善了的。虽然相比FlashRemoting可以直接返回.Net里的DataSet就逊色一些。不过总比一个15万的FlexDataServer要用的顺心。
最后在说一下AMF (Action Message Format) ,这个也很好理解。flex要访问服务器,那么它要提交一个http请求给Web服务器(IIS,JRun等)。如果是XML形式的,类似SOAP那样,它的效率肯定低。如果把提交的请求内容进行压缩再传递给服务器,服务器响应后也把结果进行同样的压缩,再反还给flex客户端,那么中间的传输效率就要高很多。AMF就这样产生了, 所以AMF是一个协议,adobe规定的。在Flex Message Server里可以看到,AMF就是作为默认的Message格式的。