Java for Flash动态网站开发手札
里介绍的FlexRemoting使用很方便,但是flex里没有mx.remoting.Service类,而且FlexRemoting那里,文档只推介绍它的FlexDataServer来进行数据访问,好贵的东西。虽然flex的关方文档着重用它自家的服务器来提供完整的解决方案,其实Flex里还是保留了flash包,利用第三方的网关也能很好的解决flex和server的数据访问,无论使用ASP,PHP还是Ruby。
我用采取的是AMFNET+ASP.Net,下面是Flex代码
<
mx:Script
>
<!
[CDATA[
import flash.net.Responder;
public
var
gateway : RemotingConnection;
public
function
initApplication()
...
{
gateway = new RemotingConnection( "http://localhost:1267/FlexAMFTest/gateway.aspx" );
gateway.call( "rayer.ReturnToFlash.ReturnStr", new Responder(onResult, onFault));
}

public
function
onResult( result:Object) :
void

...
{
trace( result );
}


public
function
onFault( fault : Object) :
void

...
{
trace( fault );
}
]]
>
</
mx:Script
>
下面是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格式的。
本文介绍如何使用AMFNET实现Flex与ASP.NET之间的高效数据交换,通过自定义RemotingConnection类替代官方未提供的mx.remoting.Service。此外,文章还讲解了AMF协议的工作原理及其优势。
6960

被折叠的 条评论
为什么被折叠?



