本文属张友邦(SpanZhang)原创,转载请注明出处。
Flash AS2在使用.NET进行数据访问的时候很方便,如果进行一定程度的包装,可以使得这个模型更加清晰和易于使用。下面是我在开发一个WEB RIA应用的时候开发出来的一套访问模型。
1、Flash端:
1.1、EventObject.as
import mx.events.EventDispatcher;
import mx.remoting.*;
import mx.rpc.*;
class span.EventObject {
public var addEventListener:Function;
public var removeEventListener:Function;
private var dispatchEvent:Function;
public function EventObject() {
EventDispatcher.initialize(EventObject.prototype);
}
private function dispatchDataEvent(strEventName:String, eventReturned:Object) {
var eventObj:Object = {type:strEventName, target:this, eventName:strEventName};
if (eventReturned.result != null) {
eventObj.eventParam= eventReturned.result;
eventObj.success= true;
}
if (eventReturned.fault != null) {
eventObj.eventParam= eventReturned.fault.faultstring;
eventObj.success= false;
}
dispatchEvent(eventObj);
}
private function dispatchSimpleEvent(strEventName:String, objEventParam:Object) {
var eventObj:Object = {type:strEventName, target:this, eventParam:objEventParam};
dispatchEvent(eventObj);
}
}
这个类是对Flash事件机制的进一步封装,以便简化实际使用中的调用程序。
1.2、DataProxy.as
import mx.events.EventDispatcher;
import mx.remoting.*;
import mx.rpc.*;
class span.DataProxy extends span.EventObject {
private var dataService:Service;
public function DataProxy() {
super();
var urlArray:Array = _root._url.split("/");
var strUrl:String = urlArray[2].toLowerCase();
dataService = new Service("http://" + strUrl + "/data/gateway.aspx", null, "data");
}
private function dummyFunction():Void{
}
private function invokeData(pendingCall:PendingCall, callbackFunction:String) {
if (callbackFunction == null || callbackFunction.length <= 0)
pendingCall.responder = new RelayResponder(this, "dummyFunction", "dummyFunction");
else
pendingCall.responder = new RelayResponder(this, callbackFunction, callbackFunction);
}
}
这个类是一个基本的数据代理接口,它是配置.NET的gateway地址的唯一地方。
1.3、HeartBeat.as
/*
Author: Span
Time: 11/16, 2006
Description: This component is designed as singleton for global use.
*/
import span.DataProxy;
class pub.HeartBeat extends span.DataProxy
{
privatestatic var heartBeat:HeartBeat;
private var timerId:Number;
private var isChecking:Boolean;
public static function instance():HeartBeat
{
if (heartBeat == null) heartBeat = new HeartBeat;
return heartBeat;
}
public function stopBeat():Void{
if (timerId > 0) {
clearInterval(timerId);
timerId = -1;
}
}
private function HeartBeat()
{
super();
isChecking = false;
doHeartBeat();
timerId = setInterval(this, "doHeartBeat", 10 * 1000);
}
private function doHeartBeat() {
if (isChecking) return;
isChecking = true;
invokeData(dataService.pub_heartBeat(), "doHeartBeatReturned");
}
private function doHeartBeatReturned(eventReturned:Object) {
if (eventReturned == null || eventReturned.result == undefined) {
dispatchSimpleEvent("heartBeatFailed");
}
else {
if (eventReturned.result == "1")
dispatchSimpleEvent("heartBeatSuccess");
else
dispatchSimpleEvent("heartBeatFailed");
}
isChecking = false;
}
}
这个类是一个应用类,它是数据访问的实现类。
2、.NET服务器端(C#)
2.1、Public.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.UI.WebControls;
using System.Data.Common;
using System.Text;
using System.Web.SessionState;
namespace System
{
public enum NCENUM_LANG_TYPE //语言类型
{
zhcn= 0,
zhtw= 1,
en= 2
}
public enum NCENUM_FLASH_RESULT_TYPE
{
STRING= 0,
STRING_ARRAY= 1,
RECORDSET= 2,
RECORDSET_ARRAY= 3
}
public class Public
{
public static void ExecFlashSql(ref FlashGateway.Flash flash, string strSql, NCENUM_FLASH_RESULT_TYPE retType)
{
if (flash == null) flash = new FlashGateway.Flash();
flash.Result = null;
DataSet ds = ncDB.ExecDataSet(strSql);
if (ds == null || ds.Tables.Count <= 0) return;
switch (retType)
{
case NCENUM_FLASH_RESULT_TYPE.STRING:
{
if (ds.Tables[0].Rows.Count > 0)
flash.Result = ds.Tables[0].Rows[0][0].ToString();
}
break;
case NCENUM_FLASH_RESULT_TYPE.STRING_ARRAY:
{
DataRow dr = ds.Tables[0].Rows[0];
int colLen = ds.Tables[0].Columns.Count;
string[] result = new string[colLen];
for (int i = 0; i < colLen; ++i)
result[i] = dr[i].ToString();
flash.Result = result;
}
break;
case NCENUM_FLASH_RESULT_TYPE.RECORDSET:
{
if (ds.Tables[0].Rows.Count > 0)
flash.Result = ds.Tables[0];
}
break;
case NCENUM_FLASH_RESULT_TYPE.RECORDSET_ARRAY:
{
int tabLen = ds.Tables.Count;
DataTable[] result = new DataTable[tabLen];
for (int i = 0; i < tabLen; ++i)
result[i] = ds.Tables[i];
flash.Result = result;
}
break;
}
}
}
}
这个文件扩展了System命名空间,增加了Flash数据访问的相应支持。
2.2、HeartBeat.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Project
{
/// <summary>
/// Summary description for HeartBeat.
/// </summary>
public class HeartBeat : System.Web.UI.Page
{
protected FlashGateway.Flash flash = new FlashGateway.Flash();
private void Page_Load(object sender, System.EventArgs e)
{
Public.ExecFlashSql
(
ref flash,
"exec dbo.p_sm_heartBeat '" + Session.SessionID + "'",
NCENUM_FLASH_RESULT_TYPE.STRING
);
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
分享到:
相关推荐
在IT领域,Flash曾是构建...开发者需要理解AS3中的网络通信机制以及ASP.NET的Web开发模型,以便创建高效且可靠的交互系统。这个简单的实例只是冰山一角,实际开发中可能涉及到错误处理、数据安全、性能优化等更多方面。
在ASP.NET中集成Flash技术实现在线拍照功能,是一种常见的网页交互设计,特别是在需要用户上传个人照片或进行实时图像处理的应用中。以下将详细介绍这个过程涉及的关键知识点。 首先,我们需要了解ASP.NET的基础。...
AS3相较于AS2,进行了重大改进,包括类型系统强化、事件驱动模型、面向对象编程的支持等。文档中会详细介绍AS3的类库和API,包括DisplayObject容器体系,如MovieClip、Sprite,它们是构建图形和动画的基础;Event类...
在.NET环境中,这类API通常基于AS3(ActionScript 3)的编程模型,因为AS3是Flash Player支持的主要编程语言。开发者可以通过.NET的封装库来调用这些功能,无需直接编写AS3代码。例如,可能会有一个`FlashControl`类...
在实际应用中,可能会使用AS3(ActionScript 3.0)版本的Flash,因为它提供了更好的性能和更现代的编程模型。同时,ASP.NET可能使用MVC(Model-View-Controller)架构,以提高代码的可维护性和可扩展性。 总结一下...
在Flash AS3编程中,加载(Loading)是关键功能之一,允许开发者动态地在应用程序运行时引入外部资源,如图像、SWF文件、XML或文本数据。本资源包含了一个名为"loading_as3"的示例项目,其中包括了loading_as3.fla...
2. **核心类库**:AS3的核心类库包括` flash.display`、` flash.events`、` flash.geom`、` flash.text`等。`display`包包含了舞台上的图形元素,如`Sprite`和`MovieClip`;`events`包处理事件监听和派发;`geom`包...
在Flash AS3播放器中,我们通常使用`flash.net.NetStream`类来处理FLV文件的加载和播放。 4. **SWF文件** `videoplayer.swf` 是编译后的Flash Player应用程序,它是所有源代码和资源的最终形态,可以在Web浏览器中...
在ASP.NET中集成Flash进行网页在线拍照是一种常见的技术,它允许用户无需离开浏览器就能拍摄或上传照片。这个技术主要依赖于Adobe Flash Player插件,它提供了丰富的多媒体交互能力。以下是对这一技术的详细解释。 ...
2. **设置跨域策略**:由于Flash的同源策略限制,你需要在服务器端配置CORS(Cross-Origin Resource Sharing)策略,允许Flash组件从不同的源发起请求。在ASP.NET MVC中,可以通过添加过滤器或自定义HTTP响应头来...
2. 在.NET端创建Web服务或WCF服务,定义需要暴露的接口和数据类型,确保与Flex端的数据模型相匹配。 3. 在Flex端创建对应的代理服务,调用.NET服务,并处理返回的数据。 4. 为了处理.NET的自定义类型,可能需要在...
本示例探讨了如何在Adobe Flash ActionScript 3 (AS3)与Microsoft C#之间实现函数的相互调用,这通常涉及到两种技术的集成,如Unity与Flash或独立Flash应用与桌面应用的交互。以下是关于这个主题的详细解释。 1. **...
.NET MVC是一个轻量级、可测试的Web应用程序框架,它采用模型-视图-控制器(MVC)设计模式,使开发人员能够更灵活地控制应用程序的结构和行为。 3. **集成步骤** - **安装Plupload**:首先,你需要从官方站点或...
在C#环境下,我们可以使用JavaScript桥接来实现与Flash的通信,因为Flash Player可以通过JavaScript与网页的DOM(文档对象模型)进行交互。但如果是桌面应用程序,如使用C#的Windows Forms或WPF,那么通信方式会有所...
4. **事件驱动模型**:AS3的事件模型是基于观察者模式的,使得用户交互和异步处理变得更加简单。 5. **更强大的API**:AS3提供了更强大的Stage3D图形渲染API,可以实现高性能的2D和3D图形处理。此外,还包含XML、...
ASP.NET可以与Flash集成,通过服务器控件和HTTP请求/响应模型,将动态数据传递给Flash,例如通过XML或AMF(Action Message Format)进行数据交换。 虽然网页Flash在过去的辉煌时期扮演了重要角色,但随着HTML5的...
在探讨“VB与Flash的双向交互”这一主题时,我们首先需要理解VB(Visual Basic)与Flash两种技术的基本概念以及它们如何实现数据和控制的相互传递。VB是一种由微软开发的事件驱动的可视化编程环境,它允许程序员通过...
3. **Video类和NetStream类**:在AS3中,`flash.media.Video`类用于显示视频内容,而`flash.net.NetStream`类负责处理视频数据的传输和解码。NetStream对象可以连接到服务器,加载视频文件,并控制播放。 4. **FLV...
ActionScript 3作为Flash Player和Adobe AIR平台的核心编程语言,相比于之前的版本AS2,具有更强的类型系统、更好的性能以及对面向对象编程的全面支持。AS3的这些提升使得Flex2成为了企业级应用开发的首选工具。 ...
例如,`flash.net.URLLoader`用于加载网络资源,`flash.media.Sound`和`flash.media.Video`类则用于处理音频和视频。 综上所述,AS3.0中文帮助资料将涵盖这些核心概念和技术,帮助开发者深入理解和掌握这一强大的...