`

用WebORB实现flex + .net后台的Remoting

    博客分类:
  • C#
阅读更多
实现flex与后台通信最简单的方式是采用httpServic的方式,或webservice。但这两种方式都是基于文本的传输,传输效率低,
采用RemoteObject的方式,传输的内容采用AMF3格式的二进制编码,效率较高,并且能实现远程对象调用,代码的可读性,和开发效率也会有所提高。

WebORB是adobe官方推荐的实现flex与.NET后台实现 RemoteObject 的解决方案。目前WebORB完全免费

WebORB的原理介绍:
1.    在Server端,WebORB利用.NET 的HTTPHANDLE机制,HttpHandle是一种在.NET程序里显示IIS中 ISAPI功能的机制,我的理解是实际上就是一种分发机制预处理机制。类似功能的还有HttpModule,比如可以将默认需要在网站系统第一次被访问的时候就初始化以后就不需要再改变的内容利用HTTPMODULE机制重载它的OnInit方法实现。

比如使用WebORB,需要在web.config文件中增加如下配置:
<httpHandlers>
      <add verb="*" path="weborb.aspx" type="Weborb.ORBHttpHandler"/>
      <add verb="*" path="codegen.aspx" type= "Weborb.Management.CodeGen.CodegeneratorHttpHandler"/>
</httpHandlers>
这段配置表示所有.aspx的http请求在被IIS分配给aspnet_wp.exe处理后, 对于名称是weborb.aspx的请求都交由Weborb.ORBHttpHandler这个类来处理,同理所有codegen.aspx页面的请求交由Weborb.Management.CodeGen.CodegeneratorHttpHandler处理。

在Weborb.ORBHttpHandler类的内部,首先解析http请求的内容,根据flex的AMF3二进制格式解码,然后根据解码后的信息,通过.net的反射机制,将远程调用的对象转换成.NET对象,并调用client端指定的方法,然后生成对应结果集, 再编码成AMF3格式,返回给客户的

2.    在client端,flex根据编译时指定的services-config.xml配置,将RemoteObect调用时指定的destination转换成对应的url调用,在调用时生成一个对应http请求,将欲调用的类和方法按协议转换成http请求内容。

使用WEBORB的方法:
.NET版本: .NET 2.0 VS2005开发环境
flex 3.0
eclipse flex builder
1.下载WebORB,并安装
2.新建asp.net工程Flat
copy WebORB工程目录下的文件(我是安装在:C:\Inetpub\wwwroot\weborb30):
weborb.config  拷贝到根目录
diagnostics.aspx  拷贝到根目录
weborb.dll  拷贝到App_WebReferences目录
3.引用weborb.dll到flat项目
4.修改flat项目的web.config文件,增加如下配置:
<httpHandlers>
      <add verb="*" path="weborb.aspx" type="Weborb.ORBHttpHandler"/>
      <add verb="*" path="codegen.aspx" type= "Weborb.Management.CodeGen.CodegeneratorHttpHandler"/>
</httpHandlers>
5.copy WEB-INF目录下所有文件到 flat项目目录下,可以随意指定,但flex 项目中必须引用这个目录,我这里copy到: E:\wwwroot\FlexDataCenter\WEB-INF\flex
6.新建cs文件,添加如下代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/**//// <summary>
/// ComputeService 的摘要说明
/// </summary>
public class ComputeService
{
    public ComputeService()
    {
        //
        // TODO: 在此处添加构造函数逻辑
        //

    }

    public int Compute(int arg1, int arg2)
    {
        return arg1 + arg2;
    }
}

Compute方法实现一个计算2个参数之和的功能。

7.在eclipse中新建flex工程 HelloNet。
8.修改HelloNet项目的编译属性为:
-locale en_US -services E:\wwwroot\FlexDataCenter\WEB-INF\flex\services-config.xml

主要是需要制定-services 参数,设定services配置文件的读取路径,以便swf文件在使用RemoteObject时将对应的amf channel映射到相应的url,这个非常重要!
默认的一个channel配置如下:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint uri="weborb.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
</channel-definition>
这个配置指定 id是my-amf的remote请求都映射到当前站点的weborb.aspx,然后交由weborb.aspx的 httphandle处理程序处理


9.修改HelloNet项目的Build Path和debug,run path : E:\wwwroot\FlexDataCenter\Flex (这是flat站点的目录)

在flex application文件中增加代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal"
    xmlns="http://www.degrafa.com/2007"
   >
   
    <mx:Script>
        <![CDATA[
            import mx.rpc.events.FaultEvent;
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.collections.ArrayCollection;
            import mx.rpc.events.ResultEvent;
                                    private function getComputerInfoHandler(event : ResultEvent) : void{
                Alert.show(event.result.toLocaleString());
            }
           
            private function getFaultHandler( event : FaultEvent) : void{
                Alert.show("fault");
            }
        ]]>
    </mx:Script>
   
        <mx:Button label="test remote" click="compinfo.Compute(1,4);">
       
    </mx:Button>
    <mx:RemoteObject id="compinfo" destination="GenericDestination"
                 source="ComputeService" 
                 showBusyCursor="true" >
           <mx:method name="Compute" result="getComputerInfoHandler(event)" fault="getFaultHandler(event);"/>
</mx:RemoteObject>

</mx:Application>

注意:RemoteObject对象 的destination表示欲调用的后台,都在remoting-config.xml配置文件中定义:
<destination id="GenericDestination">
        <properties>
            <source>*</source>
        </properties>
    </destination>
由.NET server端解析

分享到:
评论

相关推荐

    用 WebORB 实现Flex+.NET的 RIA应用程序 (2011年)

    RIA( Rich Internet Applications)技术利用具有高度交互性的胖客户端( Rich Client)为...本文建立了基于Flex+.NET的RIA程序结构,使用数据服务组件WebORB实现了 基于AMF的Flex客户端对.NET服务器上的远程对象的调用。

    flex与.net通讯中间件

    通过WebORB,Flex应用可以透明地调用.NET的Web服务、WCF服务或者.NET Remoting服务,使得开发者无需关心底层通信细节,专注于业务逻辑的实现。 安装WebORBSetup3.6.msi文件,意味着你可以得到WebORB for .NET的最新...

    FLEX与.NET交互

    总结来说,FLEX与.NET的交互涉及多个步骤,包括设置开发环境、编写.NET后台代码、使用WebORB作为通信桥梁,以及在FLEX中编写ActionScript调用.NET服务。这种交互方式为构建动态、交互性强的Web应用程序提供了可能。

    weborb4.x 配置详解

    WebORB for .NET 4.x 是一款强大的中间件,它允许开发者使用ActionScript 3 (AS3) 和Flex与.NET 2010框架进行无缝集成,实现富互联网应用程序(RIA)的开发。本文将详细解析如何配置WebORB 4.x以在ASP.NET 2010环境...

    FLEX 与现有开发语言的通信全面解析

    Flash Remoting使用AMF协议,而WebORB支持AMF和SOAP等多种通信协议,使Flex能够无缝地调用.NET服务。 三、Flex与PHP的通信:在PHP环境中,Flex通常使用HTTPService或WebService组件与PHP进行通信。HTTPService可以...

    TestAMF_Remoting_C#_

    在WebORB for .NET中,Remoting允许C#开发者创建可从客户端(如Flex或ActionScript)直接调用的服务。这极大地简化了客户端与服务器之间的通信,因为AMF是一种二进制格式,相比传统的HTTP/JSON或XML,它能更高效地...

    Flex HTTPService with ASP.NET.zip

    本教程旨在演示在帶有ASP.NET的Flex 2+中HTTPService功能的使用。 Adobe Flex中有許多方法可以與ASP.NET(或簡單地說,服務器端語言)進行通信。 HttpService,WebService,WebORB,FluorineFx等。在本教程中,我僅...

    Amethyst vs2008 vs2010 flex插件注册机(含WebORB破解)

    这个是国外的一个收费的用于VS下的Flex插件,有了他,你就可以在VS下轻松快捷的开发flex程序了。压缩包里是最新的注册机。此注册机可用于VS2008和VS2010版本插件。与前面不同的是添加了【WebORB模块的破解】。 此...

    weborb.dll

    WebORB允许开发人员使用多种编程语言,如ActionScript、Flex、Java、C#或.NET,来创建分布式应用程序。它特别适合构建基于AMF(Action Message Format)的实时数据交互应用。 描述中提到的"weborb 5.1 去除授权验证...

    Flex4 SQL2005

    在众多实现Flex与后端数据库连接的方法中,我们选择了Remoting的方式,通过FluorineFX与ASP.NET结合实现Flex访问SQL Server 2005数据库的功能,并将查询结果展示在GridView控件中。 #### 方案比较 Flex访问数据库...

    WebORB 5.1 For Java 破解

    WebORB 5.1 For Java 破解 weborb.jar 反编译破解,开发版默认为5IP限制,现破解为无IP限制。

    flex制作的象棋游戏

    如果想实现网络对战功能,Flex可以借助 BlazeDS 或 WebORB 等服务端组件,实现实时的数据交换。玩家的每一步操作都会发送到服务器,经过合法性验证后,再将结果广播给所有参与者。 8. UI设计与用户体验: Flex...

    myFirstProject_actionscript_

    标题 "myFirstProject_actionscript_" 暗示我们正在探讨一个使用ActionScript的项目,可能是WebORB(Web Object Request Broker)的一个示例。ActionScript是一种面向对象的编程语言,主要用在Adobe Flash平台上,...

    puremvc-as3-demo-flex-weborb-login:PureMVC AS3 Flex WebORB演示

    演示:登录(Flex / WebORB) 该演示演示了WebORB服务与基于PureMVC的Flex客户端的协作,以执行登录操作。 截屏 地位 生产- 平台/技术 执照 PureMVC AS3演示-Flex / WebORB登录-版权所有:copyright:2008 Jens ...

    基于FLEX技术的投票系统实例代码

    5. **远程通信**:如果投票数据需要保存在服务器上,Flex可以使用 BlazeDS 或 WebORB 等中间件与后端服务器进行AMF(Action Message Format)通信,实现实时的数据交换。 6. **动画和特效**:Flex内置了丰富的动画...

    Flex_Java.rar

    4. ** Java Socket通信 **:虽然不太常见,但也可以通过建立Socket连接实现Flex与Java的低级通信,这种方式适用于需要实时双向通信的场景,如游戏或聊天应用。 5. ** 第三方库 **:还有许多第三方库如GraniteDS和...

    PB 调用webservice 几种方式

    例如,如果Web服务使用了.NET框架,WebORB或ADO.NET Data Provider可能是更好的选择;如果Web服务基于SOAP,SOAP Toolkit则是最直接的途径。 以"weather"为例,假设我们有一个提供天气预报的Web服务,我们可以使用...

    pb调用webservice的例子

    本文将详细阐述如何在PB 11.5环境下,利用PB的功能来调用WebService,实现天气预报和手机号码归属地查询。 首先,我们需要了解PB 11.5的基本知识。PowerBuilder是一款由Sybase公司(现已被SAP收购)开发的面向对象...

    Power Builder编程经验谈

    9. **网络与Web应用**:Power Builder也能开发基于Web的应用,如使用WebORB或 Appeon 进行.NET或Java的部署。了解这些技术,可以让Power Builder应用跨越桌面边界,走向互联网。 10. **版本控制集成**:在团队开发...

Global site tag (gtag.js) - Google Analytics