Flex與.NET互操作 了解FluorineFx的環(huán)境配置(遠(yuǎn)程對(duì)象、網(wǎng)關(guān)、通道、目的地)
在本系列文章的前面幾篇文章中所介紹的訪問(wèn)Webservice的方法,也就是一種遠(yuǎn)程對(duì)象方法,只不過(guò)他是基于WEB服務(wù)(WebServie)的遠(yuǎn)程訪問(wèn),不是基于遠(yuǎn)程對(duì)象(Remoting Object)的的遠(yuǎn)程訪問(wèn)。要想直接實(shí)現(xiàn)基于對(duì)象的遠(yuǎn)程訪問(wèn)是比較麻煩的,然后FluorineFx則專門為我們提供了該功能,通過(guò) FluorineFx的核心庫(kù)來(lái)開發(fā)遠(yuǎn)程對(duì)象(Remoting Object)服務(wù),具體是怎么實(shí)現(xiàn)的呢?
FluorineFx要求為遠(yuǎn)程對(duì)象提供[RemotingService]標(biāo)記來(lái)提供遠(yuǎn)程對(duì)象服務(wù),看看下面的RemotingServiceAttribute的詳細(xì)定義:
2 public sealed class RemotingServiceAttribute : Attribute
3 {
4 public RemotingServiceAttribute();
5 public RemotingServiceAttribute(string serviceName);
6 }
從上一篇文章中的示例代碼可以看出,使用.NET(c#)定義了一個(gè)Sample的遠(yuǎn)程對(duì)象服務(wù)類,并為其指定了[RemotingService],詳細(xì)如下:
2 public class Sample
3 {
4 public Sample()
5 {
6 }
7
8 public string Echo(string text)
9 {
10 return "Gateway echo: " + text;
11 }
12 }
從上一篇文章中搭建FluorineFx與.NET的開發(fā)環(huán)境過(guò)程中就已經(jīng)出現(xiàn)過(guò)Flex客戶端調(diào)用FluorineFx的遠(yuǎn)程對(duì)象示例,下面我們?cè)趤?lái)看看這個(gè)示例:
2 source="FlexDotNet.ServiceLibrary.Sample">
3 <mx:method name="Echo" result="onResult(event)">
4 </mx:method>
5 </mx:RemoteObject>
2 <![CDATA[
3 import mx.rpc.events.ResultEvent;
4 internal function onClick():void
5 {
6 service.Echo(txtInput.text);
7 }
8
9 internal function onResult(evt:ResultEvent):void
10 {
11 txtResult.text = evt.result.toString();
12 }
13 ]]>
14 </mx:Script>
如上可實(shí)現(xiàn)遠(yuǎn)程對(duì)象訪問(wèn),通過(guò)Flex的非可視化組件<mx:RemoteObject>進(jìn)行遠(yuǎn)程對(duì)象連接。其中的 source屬性指定遠(yuǎn)程對(duì)象,格式為全限定名(命名空間+類名)。destination屬性是非常重要的,這決定了Flex客戶端是否可以正確的訪問(wèn)到遠(yuǎn)對(duì)象,相關(guān)配置如下:
2 <properties>
3 <source>*</source>
4 </properties>
5 </destination>
在<mx:RemoteObject>組件內(nèi)部使用<mx:Mothod>組件配置遠(yuǎn)程對(duì)象中的方法,詳細(xì)見(jiàn)本文前面部分。要真實(shí)實(shí)現(xiàn)遠(yuǎn)程對(duì)象訪問(wèn)的核心是對(duì)象的適配器和連接通道:
2 <service id="remoting-service"
3 class="flex.messaging.services.RemotingService"
4 messageTypes="flex.messaging.messages.RemotingMessage">
5 <adapters>
6 <adapter-definition id="dotnet" class="FluorineFx.Remoting.RemotingAdapter" default="true"/>
7 </adapters>
8
9 <default-channels>
10 <channel ref="my-amf"/>
11 </default-channels>
12
13 <destination id="fluorine">
14 <properties>
15 <source>*</source>
16 </properties>
17 </destination>
18 </service>
實(shí)際開發(fā)中我們可以進(jìn)行自定義通信通道,默認(rèn)情況下是使用FluorineFx為我們提供的默認(rèn)連接通道:
2 <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
3 <endpoint uri="http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/>
4 <properties>
5 <!-- <legacy-collection>true</legacy-collection> -->
6 </properties>
7 </channel-definition>
8 </channels>
相關(guān)文章
Flex ShareObject簡(jiǎn)單應(yīng)用
Share object一般用來(lái)保存前來(lái)訪問(wèn)的用戶的個(gè)人信息到用戶的機(jī)器上。比如用戶登陸過(guò)后保存他的名字,下次訪問(wèn)時(shí)自動(dòng)顯示,或者保存用戶的個(gè)性化設(shè)置等等。2009-06-06Flex 自動(dòng)獲取焦點(diǎn) 監(jiān)聽(tīng)全局鍵盤事件
Flex 編程注意之自動(dòng)獲取焦點(diǎn)、監(jiān)聽(tīng)全局鍵盤事件2009-07-07Flex 全屏組件 部分全屏的實(shí)現(xiàn)代碼
一般情況下,F(xiàn)lex全屏是指將整個(gè)舞臺(tái)全屏,而不是待定的組件全屏.網(wǎng)上的例子也一般是指這種情況的.2009-09-09