`

用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服务器上的远程对象的调用。

    weborb4.x 配置详解

    原创weborb4.x + asp.net 2010 + Flex4 配置方法

    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 5.1 For Java 破解

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

    TestAMF_Remoting_C#_

    weborb remoting app server example

    weborb.dll

    weborb 5.1 去除授权验证代码,只供学习使用!

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

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

    weborb4初级教程

    Webord快速入门教程,英文版.是flex和net交互的一本好书.

    myFirstProject_actionscript_

    actionscript mx weborb ro example

    Java-Deserialization-Cheat-Sheet:关于Java反序列化漏洞的备忘单

    请使用#javadeser哈希标签进行鸣叫。 表中的内容 json-io(JSON) 杰克逊(JSON) Fastjson(JSON) Genson(JSON) Flexjson(JSON) 乔德(JSON) 红色5 IO AMF(AMF) Apache Flex BlazeDS(AMF) ...

    GrrrDog-Java-Deserialization-Cheat-Sheet:https

    请使用#javadeser哈希标签进行鸣叫。 表中的内容 json-io(JSON) 杰克逊(JSON) Fastjson(JSON) Genson(JSON) Flexjson(JSON) 乔德(JSON) 红色5 IO AMF(AMF) Apache Flex BlazeDS(AMF) ...

    Curl Data Kit-开源

    Curl数据工具包-一个Curl开源项目CDK库有助于在Curl中进行以数据为中心的应用程序开发。 它包括对客户端SQLite数据库的支持以及对BlazeDS和WebORB等AMF服务器的支持

Global site tag (gtag.js) - Google Analytics