| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > Flash特别应用 > 文章正文 用户登录
如何加入透明Flas
为新浪博客添加fl
flashget下载联盟
265联盟:“Flash
新易网络提供100M
龙太极/100m/asp/
无限网络提供50M 
霞光科技50M/Htm/
苏能科技100M/FTP
悠博科技50M/FTP/

Flash8 Remoting 例子 For .NET           

Flash8 Remoting 例子 For .NET

作者:佚名 来源:闪吧 作者: 风中独火 更新:2007-1-13 21:00:51 错误报告 我要投稿

最近研究Flash Remoting的连接,PHP和.NET都已经连接成功,PHP方面用的是AMF,因为实在是非常的简单,只要你的PHP运行正常,按照AMF的要求在函数中写了方法声明就OK了.所以在这里就不介绍了.有什么问题可以M我.
下面只介绍连接.NET方面的.
1.首先确保你已经安装Vs2003,并且已经可以正常的创建web应用程序(其实安装SDK也可以,不过我是习惯了用IDE,不用editplus+csc.exe了)
2.下载Flash8的Remoting组件以及For .NET 的网关文件(gateway)
http://download.macromedia.com/pub/flashremoting/flash8/flashremoting_components_flash8.msi
这是Flash的Remoting组件,下载安装时,它会询问你的Flash8的安装位置,一般是不需要改动的,它会自动找到正确的位置,如果因为某些安装卸载的原因,路径不正确的话,请选择正确的安装路径.
安装完毕以后,你打开Flash以后会在组件→Data Componets下发现一个RemotingConnector的组件,这就是我们刚刚安装的,其实和Flash2004MX中的没有什么不同,不过由于在使用过程中,每个组件的实例只能连接一个远程的方法,所以我们很少用组建直接连接,一般都是编写代码的方式.而且代码中也要采用相关的设计模式,以避免网络的阻塞现象.
接下来安装Getway文件.flashremoting-net-win-en.exe
http://www.macromedia.com/cfusion/tdrc/index.cfm?product=flash_remoting
这个文件需要注册MM
这个文件包含了一个作为网关的HttpModle文件,是一个多语言的版本(英语,德语,日文,没有中文sign~),同时MM也提供了这个文件的updater,你安装完毕以后,可以把updater里的flashgateway.dll直接覆盖了原有的文件就可以了(没有注册码的兄弟先试用吧)
安装完毕以后,你的机器就具备了编写执行Flash Remoting的能力了.
PS:这里有几个小问题,首先这个网关是默认安装到C盘的原来的网页的根目录下的flashremogint目录中的,不允许你更改目录,但是可以改doc和samples的目录(没有gateway,也运行不了,有点bt的说.)安装以后,由于安装程序没有建立相关的虚拟目录所以.net程序是不能执行的.你需要自己在IIS中,在flashremoting这个目录中点创建,创建一个虚拟目录(.NET中的应用程序),就可以浏览samples中的文件了.
接着,我们开始建立我们的一个简单的示例程序,还是从Hello World开始吧.
基本上来讲,Flash Remoting的服务器端gateway就是利用.NET中的delegate技术,创建了一个httpModule,通过这个gateway.aspx作为远程调用的入口点,根据MM网站上的介绍,它可以支持asp.net,ado.net,dll等等.
我们这里进行简单的分类,就是它可以支持包含了用户控件的aspx页面和直接调用编写好的dll文件.
目前网上的普遍例子都是通过aspx来调用的其实在实际开发过程中还是直接调用dll中的方法更简单,同时这里官方的说明中有一个错误!
接下来,我们用vs创建一个名为:RemotingDotNet的web工程(提示:你可以先在IIS中创建一个虚拟目录,这样你可以把你的工程保存在合适的地方,不用都堆在web根目录下)
然后在vs中的解决方案资源管理器中,右击你的项目,在弹出的菜单中选属性,把应用程序集和默认的命名空间都改成:FireINwind.Flash.RemotingDotNet,这样一来可以合理的知道项目的情况(也许不是很合理,有点稍微违背命名空间的原则^-$),二是为了说明我上面提到的MM官方说明的错误.
然后简单一点,创建一个aspx,在页面中把所有的html代码都删除,然后写上应用flashgateway 自定义web控件的代码.
整个aspx页面的代码如下:

<%@ Register TagPrefix="MM" Namespace="FlashGateway" Assembly="flashgateway" %>
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="FireINwind.Flash.RemotingDotNet.Test" %>
<MM:Flash ID="flash1" runat="server"></MM:Flash>

这里的MM,网上一般也有写Macromedia的,只要和上面的TagPrefix的应用定义一致就行了,我为了简单写成MM了.是一样的.
然后开始编写代码:)这里有个小技巧,你可以把你的aspx切换到设计视图,然后保存一下,你在设计视图上会看到你引入的这个web控件:
按此在新窗口浏览图片
这么做的好处是vs会自动给你在cs中声明一个flash1的Flash类型的变量.
然后简单点,按F7打开cs,在Page_Load中写下如下的代码:

protected FlashGateway.Flash flash1; 
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(this.flash1.Params.Count>0)
   {
    this.flash1 .Result ="Hello world:" + this.flash1.Params [0].ToString ();
   }
   else
   {
    this.flash1 .Result ="Welcome to Flashremoting!";
   }
  }

接下来我们写一个cs类来做对比.
新建一个RemoteTest的类,其中就有一个public的方法.

public string Helloworld(string UserName)
  {
   return "Welcome to FlashRemoting!" + UserName;
  }

是不是很简单,接受一个参数,然后返回一个结果:)
然后是最重要的一步,我刚才已经简单的分析过,MM提供的这个网关是以HttpModle的形式实现,所以我们要在web.config中配置对其的调用.
在<system.web>节中加入

<httpModules>
  <add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />
    </httpModules>

网上的教程一般都忽略了这一点,如果是借用安装的时候那个web.config是没有问题的,如果是自己建立工程时候,不自行修改,是无法呼叫远程的方法的.请大家一定注意.
然后我们开是试用Flash8进行测试:)
新建一个F8的文档.
然后在舞台中放入一个Label,名为LabelShow,用来显示远程的结果,放一个Button,名为BtnGet来触发对远程的访问.
在第一桢中写入如下的代码:

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.debug.NetDebug;
NetDebug.initialize ();
BtnGet.onRelease = function()
{
 trace("开始获取远程资料!");
 _root.LabelShow.text="请等待……";
 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");
 pc.responder = new RelayResponder(_root, "ServicesResult_Success", "ServicesResult_Failture");
};
function ServicesResult_Success(result:ResultEvent)
{
 trace("successful!");
 _root.LabelShow.text = result.result;
}
function ServicesResult_Failture(fault:FaultEvent)
{
 trace("fail!");
 _root.LabelShow.text = fault.fault.faultstring;
}

请大家注意这两句代码:

var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");

按照MM官方的说法红色的字的部分,应该是.net的namespace,但是我们刚才已经把namespace改成了FireINwind.Flash.RemotingDotNet,这里如果是namespace的话,应该是写上FireINwind.Flash.RemotingDotNet,然后myServece去调用Test.aspx这个codebing的class的名字:Test;但是实际上,如果你这样写的话,.flashremoting会报告你无法找到这个方法(在你的bin目录下的log目录中有错误的日志,NetConnection Debuger中也会有相关的错误提示.)
下面我们就要调用class中的方法
把上面两句话改成:

 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "FireINwind.Flash.RemotingDotNet.RemoteTest", null, null);
 var pc:PendingCall = myService.Helloworld("风中独火!");

你会发现,这里就要写完全的namespace 了,究其原因,我估计是MM的gateway在实现的时候,利用delegate寻找dll(aspx其实也是dll类型的项目)的路径问题,到底是不是,暂时没有时间反编译MM的网关,有兴趣的东西可以自己用reflecor看看.
就写到这里吧,有什么问题,欢迎拍砖!

 

 

<%@ Register TagPrefix="MM" Namespace="FlashGateway" Assembly="flashgateway" %>
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="FireINwind.Flash.RemotingDotNet.Test" %>
<MM:Flash ID="flash1" runat="server"></MM:Flash>

这里的MM,网上一般也有写Macromedia的,只要和上面的TagPrefix的应用定义一致就行了,我为了简单写成MM了.是一样的.
然后开始编写代码:)这里有个小技巧,你可以把你的aspx切换到设计视图,然后保存一下,你在设计视图上会看到你引入的这个web控件:
按此在新窗口浏览图片
这么做的好处是vs会自动给你在cs中声明一个flash1的Flash类型的变量.
然后简单点,按F7打开cs,在Page_Load中写下如下的代码:

protected FlashGateway.Flash flash1; 
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(this.flash1.Params.Count>0)
   {
    this.flash1 .Result ="Hello world:" + this.flash1.Params [0].ToString ();
   }
   else
   {
    this.flash1 .Result ="Welcome to Flashremoting!";
   }
  }

接下来我们写一个cs类来做对比.
新建一个RemoteTest的类,其中就有一个public的方法.

public string Helloworld(string UserName)
  {
   return "Welcome to FlashRemoting!" + UserName;
  }

是不是很简单,接受一个参数,然后返回一个结果:)
然后是最重要的一步,我刚才已经简单的分析过,MM提供的这个网关是以HttpModle的形式实现,所以我们要在web.config中配置对其的调用.
在<system.web>节中加入

<httpModules>
  <add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />
    </httpModules>

网上的教程一般都忽略了这一点,如果是借用安装的时候那个web.config是没有问题的,如果是自己建立工程时候,不自行修改,是无法呼叫远程的方法的.请大家一定注意.
然后我们开是试用Flash8进行测试:)
新建一个F8的文档.
然后在舞台中放入一个Label,名为LabelShow,用来显示远程的结果,放一个Button,名为BtnGet来触发对远程的访问.
在第一桢中写入如下的代码:

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.debug.NetDebug;
NetDebug.initialize ();
BtnGet.onRelease = function()
{
 trace("开始获取远程资料!");
 _root.LabelShow.text="请等待……";
 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");
 pc.responder = new RelayResponder(_root, "ServicesResult_Success", "ServicesResult_Failture");
};
function ServicesResult_Success(result:ResultEvent)
{
 trace("successful!");
 _root.LabelShow.text = result.result;
}
function ServicesResult_Failture(fault:FaultEvent)
{
 trace("fail!");
 _root.LabelShow.text = fault.fault.faultstring;
}

请大家注意这两句代码:

var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");

按照MM官方的说法红色的字的部分,应该是.net的namespace,但是我们刚才已经把namespace改成了FireINwind.Flash.RemotingDotNet,这里如果是namespace的话,应该是写上FireINwind.Flash.RemotingDotNet,然后myServece去调用Test.aspx这个codebing的class的名字:Test;但是实际上,如果你这样写的话,.flashremoting会报告你无法找到这个方法(在你的bin目录下的log目录中有错误的日志,NetConnection Debuger中也会有相关的错误提示.)
下面我们就要调用class中的方法
把上面两句话改成:

 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "FireINwind.Flash.RemotingDotNet.RemoteTest", null, null);
 var pc:PendingCall = myService.Helloworld("风中独火!");

你会发现,这里就要写完全的namespace 了,究其原因,我估计是MM的gateway在实现的时候,利用delegate寻找dll(aspx其实也是dll类型的项目)的路径问题,到底是不是,暂时没有时间反编译MM的网关,有兴趣的东西可以自己用reflecor看看.
就写到这里吧,有什么问题,欢迎拍砖!

 

<%@ Register TagPrefix="MM" Namespace="FlashGateway" Assembly="flashgateway" %>
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="FireINwind.Flash.RemotingDotNet.Test" %>
<MM:Flash ID="flash1" runat="server"></MM:Flash>

这里的MM,网上一般也有写Macromedia的,只要和上面的TagPrefix的应用定义一致就行了,我为了简单写成MM了.是一样的.
然后开始编写代码:)这里有个小技巧,你可以把你的aspx切换到设计视图,然后保存一下,你在设计视图上会看到你引入的这个web控件:
按此在新窗口浏览图片
这么做的好处是vs会自动给你在cs中声明一个flash1的Flash类型的变量.
然后简单点,按F7打开cs,在Page_Load中写下如下的代码:

protected FlashGateway.Flash flash1; 
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(this.flash1.Params.Count>0)
   {
    this.flash1 .Result ="Hello world:" + this.flash1.Params [0].ToString ();
   }
   else
   {
    this.flash1 .Result ="Welcome to Flashremoting!";
   }
  }

接下来我们写一个cs类来做对比.
新建一个RemoteTest的类,其中就有一个public的方法.

public string Helloworld(string UserName)
  {
   return "Welcome to FlashRemoting!" + UserName;
  }

是不是很简单,接受一个参数,然后返回一个结果:)
然后是最重要的一步,我刚才已经简单的分析过,MM提供的这个网关是以HttpModle的形式实现,所以我们要在web.config中配置对其的调用.
在<system.web>节中加入

<httpModules>
  <add name="GatewayController" type="FlashGateway.Controller.GatewayController,flashgateway" />
    </httpModules>

网上的教程一般都忽略了这一点,如果是借用安装的时候那个web.config是没有问题的,如果是自己建立工程时候,不自行修改,是无法呼叫远程的方法的.请大家一定注意.
然后我们开是试用Flash8进行测试:)
新建一个F8的文档.
然后在舞台中放入一个Label,名为LabelShow,用来显示远程的结果,放一个Button,名为BtnGet来触发对远程的访问.
在第一桢中写入如下的代码:

import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall;
import mx.remoting.debug.NetDebug;
NetDebug.initialize ();
BtnGet.onRelease = function()
{
 trace("开始获取远程资料!");
 _root.LabelShow.text="请等待……";
 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");
 pc.responder = new RelayResponder(_root, "ServicesResult_Success", "ServicesResult_Failture");
};
function ServicesResult_Success(result:ResultEvent)
{
 trace("successful!");
 _root.LabelShow.text = result.result;
}
function ServicesResult_Failture(fault:FaultEvent)
{
 trace("fail!");
 _root.LabelShow.text = fault.fault.faultstring;
}

请大家注意这两句代码:

var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "RemotingDotNet", null, null);
 var pc:PendingCall = myService.Test("风中独火!");

按照MM官方的说法红色的字的部分,应该是.net的namespace,但是我们刚才已经把namespace改成了FireINwind.Flash.RemotingDotNet,这里如果是namespace的话,应该是写上FireINwind.Flash.RemotingDotNet,然后myServece去调用Test.aspx这个codebing的class的名字:Test;但是实际上,如果你这样写的话,.flashremoting会报告你无法找到这个方法(在你的bin目录下的log目录中有错误的日志,NetConnection Debuger中也会有相关的错误提示.)
下面我们就要调用class中的方法
把上面两句话改成:

 var myService:Service = new Service("http://localhost/RemotingDotNet/gateway.aspx", null, "FireINwind.Flash.RemotingDotNet.RemoteTest", null, null);
 var pc:PendingCall = myService.Helloworld("风中独火!");

你会发现,这里就要写完全的namespace 了,究其原因,我估计是MM的gateway在实现的时候,利用delegate寻找dll(aspx其实也是dll类型的项目)的路径问题,到底是不是,暂时没有时间反编译MM的网关,有兴趣的东西可以自己用reflecor看看.
就写到这里吧,有什么问题,欢迎拍砖!

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。