初探 Flash Remoting+Asp.Net

最近聊天联盟系统要升级到 Asp.Net 环境,.Net环境提供了更为强大的应用程序通讯能力,那么原来系统所采用的基于 http 的 post 方式我们决定舍弃。

聊天室程序与Asp.Net的通讯包括两个方面,一是客户端swf与Asp.Net的通讯,二是服务器端FMS与Asp.Net的通讯,所谓通讯,就是访问Asp.Net来获取数据,在Asp环境下只能通过http的post/get获取返回的纯文本格式的数据,再根据需要进行拆分数组及类型转换,但在.Net环境下,Flash能与Asp.Net直接交换不同的数据类型,而不需要再作拆分和转换。

这种新的通讯方式有两种方案,一种是比较热门的SOAP方式,通过在.Net端编写WebService可以向Flash返回各种类型的数据,不过这个方案立即被我们否决了,原因有二,首先,WebService一个文件只能返回一个数据,交互多了文件不好维护;其次,WebService不认Session,对于需要Session认证的客户端swf而言不安全……
以上是一点辅垫……

Flash Remoting是Flash的一个组件,在Asp.Net中,需要在站点的/bin/目录下放入flashgateway.dll,并在站点的web.config文件的httpModules节点中加入<add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />,完成这两项工作后就可以在Flash中编写Remoting来访问Asp.Net了(这部分教程由zrong提供,偶只写Asp.Net部分,呵呵)
Flash Remoting在与Asp.Net交换数据时有多种方式,归纳起来为:
一、直接访问Asp.Net文件,aspx文件中有Flash控件
二、访问带cs后代码的Asp.Net文件,aspx文件中有Flash控件
三、访问WebService,即asmx 文件
四、访问dll文件

前两种本质上没有区别,而且不支持在一个文件中定义多个函数,不作介绍,第三种有点脱XX放X的感觉,重点看第四种,第四种其实是第二种的升级版本,我们可以在cs文件中将一个普通的aspx.cs编译为dll进行调用,这样就不需要实际存在一个aspx文件,因为访问是通过代理的方式访问一个空白aspx页面实现的,这个代理是操作是通过httpModules实现的,核心代码在flashgateway.dll中……具体的过程不是很清楚,但原理相信是一种基于http的特殊封包协议,与SOAP比较相近,可能也正是因为这个原因,和Flash进行交互的aspx程序中的Request对象就失效了(即程序中无法通过Request对象下的各个集合如Form/QueryString/Url进行取值了)

完全不了解Flash Remoting的朋友看到这篇文章可能会很糊涂,有时间偶做张图大家看看应该会比较清晰了