日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
用FluorineFx庫(kù)實(shí)現(xiàn)Silverlight遠(yuǎn)程過(guò)程調(diào)用

Silverlight中數(shù)據(jù)訪問(wèn)的實(shí)現(xiàn)方式非常之多,可以直接通過(guò)HTTP頁(yè)面提供訪問(wèn)接口,也可以通過(guò)WebService、WCF以及其他的相關(guān)技術(shù)來(lái)實(shí)現(xiàn)。在MIX 09上,Nikhil Kothari發(fā)布了微軟的一神作——Microsoft .NET RIA Services,主要用來(lái)提供RIA應(yīng)用的數(shù)據(jù)訪問(wèn)服務(wù),詳細(xì)可以查閱博友 流牛木馬 的《Microsoft .NET RIA Services快速上手 》這篇文章。在開(kāi)源項(xiàng)目FluorineFx庫(kù)中也提供了供Silverlight實(shí)現(xiàn)RPC的類(lèi)庫(kù),究竟誰(shuí)的傳輸效率高呢這里暫不討論,本文作重介紹如何使用FluorineFx Silverlight庫(kù)去實(shí)現(xiàn)Silverlight遠(yuǎn)程過(guò)程調(diào)用(RPC)。

本文實(shí)例程序開(kāi)發(fā)環(huán)境:Microsoft Visual Studio 2008 + SP1、.net framework 3.5 + SP1、 Silverlight 3 Beta、FluorineFx v1.0.0.15 。本文最終的項(xiàng)目解決方案如下圖:

一、在Silverlight中的網(wǎng)絡(luò)安全訪問(wèn)限制

如果連接請(qǐng)求是從 WebClient 或 HTTP 類(lèi)到某個(gè)跨域站點(diǎn)的,則 Silverlight 2 運(yùn)行時(shí)將使用 HTTP 協(xié)議嘗試下載安全策略文件。Silverlight 2 運(yùn)行時(shí)首先嘗試使用 HTTP 協(xié)議下載所請(qǐng)求目標(biāo)域的根目錄下名為“clientaccesspolicy.xml”的 Silverlight 策略文件。如果返回 Silverlight 策略文件(即使在分析該文件時(shí)出現(xiàn)錯(cuò)誤),則在 Silverlight 應(yīng)用程序的整個(gè)會(huì)話期間,此文件將用作該跨域請(qǐng)求以及針對(duì)該服務(wù)器的所有后續(xù)請(qǐng)求的策略文件。如果找不到 Silverlight 策略文件,則 Silverlight 2 運(yùn)行時(shí)嘗試使用 HTTP 協(xié)議下載所請(qǐng)求目標(biāo)域的根目錄下名為“crossdomain.xml”的 Flash 策略。

 
 
 
 
  1. < ?xml version="1.0" encoding="utf-8"?> 
  2. < ACCESS-POLICY> 
  3.   < CROSS-DOMAIN-ACCESS> 
  4.     < ALLOW-FROM http-request-headers="*"> 
  5. "  
  6.     < /ALLOW-FROM> 
  7.     < GRANT-TO> 
  8. < RESOURCE include-subpaths="true" path="/" /> 
  9.     < /GRANT-TO> 
  10.   < /CROSS-DOMAIN-ACCESS> 
  11. < /ACCESS-POLICY>  

二、基與FluorineFx庫(kù)的遠(yuǎn)程調(diào)用服務(wù)接口

接下來(lái)創(chuàng)建FluorineFx類(lèi)庫(kù),提供遠(yuǎn)程訪問(wèn)服務(wù)接口(RemotingService),并提供相應(yīng)的方法讓Sliverlight客戶端通過(guò)FluorineFx通信網(wǎng)關(guān)實(shí)行RPC調(diào)用。

 
 
 
 
  1. namespace ServiceLibrary  
  2. {  
  3.     [RemotingService]  
  4.     public class DataService  
  5.     {  
  6.   public DataService()  
  7.   {  
  8.   }  
  9.  
  10.   [DataTableType("Book", "ServiceLibrary.Book")]  
  11.   public DataTable GetBookTable()  
  12.   {  
  13. DataTable dt = new DataTable("Book");  
  14. dt.Columns.Add("ID", typeof(int));  
  15. dt.Columns.Add("Name", typeof(string));  
  16. dt.Columns.Add("Author", typeof(string));  
  17. dt.Columns.Add("Price", typeof(double));  
  18.  
  19. DataRow dr = dt.NewRow();  
  20. dr["ID"] = 1;  
  21. dr["Name"] = "《三國(guó)演義》";  
  22. dr["Author"] = "羅貫中";  
  23. dr["Price"] = 100.00;  
  24. dt.Rows.Add(dr);  
  25.  
  26. dr = dt.NewRow();  
  27. dr["ID"] = 2;  
  28. dr["Name"] = "《西游記》";  
  29. dr["Author"] = "吳承恩";  
  30. dr["Price"] = 200.00;  
  31. dt.Rows.Add(dr);  
  32.  
  33. dr = dt.NewRow();  
  34. dr["ID"] = 3;  
  35. dr["Name"] = "《水滸傳》";  
  36. dr["Author"] = "施耐庵";  
  37. dr["Price"] = 300.00;  
  38. dt.Rows.Add(dr);  
  39.  
  40. dr = dt.NewRow();  
  41. dr["ID"] = 4;  
  42. dr["Name"] = "《紅樓夢(mèng)》";  
  43. dr["Author"] = "曹雪芹";  
  44. dr["Price"] = 400.00;  
  45. dt.Rows.Add(dr);  
  46.  
  47. return dt;  
  48.   }  
  49.     }  

三、使用FluorineFx網(wǎng)站宿主FluorineFx遠(yuǎn)程服務(wù)

供遠(yuǎn)程訪問(wèn)(RemotingService)接口完成后,還需要建立一個(gè)FluorineFx網(wǎng)站,用來(lái)承載這個(gè)接口的遠(yuǎn)程服務(wù)。并同時(shí)配置AMF通信的信道(在services-config.xml中配置)。 

 
 
 
 
  1. < CHANNELS> 
  2.     < CHANNEL-DEFINITION id=my-amf class=mx.messaging.channels.AMFChannel> 
  3.   < ENDPOINT uri="< A href=" Gateway.aspx? {context.root} {server.name}:{server.port} http:>http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class="flex.messaging.endpoints.AMFEndpoint"/> 
  4.   < PROPERTIES> 
  5.     
  6.     < /CHANNEL-DEFINITION> 
  7. < /CHANNELS> 

然后運(yùn)行這個(gè)網(wǎng)站以得到客戶端RPC訪問(wèn)時(shí)所需要的網(wǎng)關(guān)地址,這里是本地測(cè)試。如果部署到服務(wù)器上則根據(jù)實(shí)際的部署信息(服務(wù)器IP/網(wǎng)站域名等)訪問(wèn)。本地網(wǎng)關(guān)地址:http://localhost:3103/WebHost/Gateway.aspx。通過(guò)FluorineFx控制臺(tái)測(cè)試便可以看到FluorineFx遠(yuǎn)程服務(wù)接口方法的調(diào)用情況,如下圖示: 

四、創(chuàng)建Silverlight應(yīng)用程序

現(xiàn)在創(chuàng)建一個(gè)Silverlight 應(yīng)用程序,并為此應(yīng)用程序創(chuàng)建一個(gè)宿主這個(gè)應(yīng)用程序客戶端的Web應(yīng)用程序,這里的宿主Web應(yīng)用程序就直接創(chuàng)建在上面提供遠(yuǎn)程服務(wù)接口的FluorineFx網(wǎng)站中,當(dāng)然你也可以創(chuàng)建新的Web應(yīng)用程序來(lái)宿主Silverlight應(yīng)用程序客戶端。

五、通過(guò)FluorineFx的Silverlight庫(kù)實(shí)現(xiàn)Silverlight應(yīng)用的RPC

這里首先定義一個(gè)DTO(數(shù)據(jù)傳輸對(duì)象)對(duì)象Book,如下:

 
 
 
 
  1. namespace SilverlightApp  
  2. {  
  3.     public class Book  
  4.     {  
  5.   public int ID { get; set; }  
  6.   public string Name { get; set; }  
  7.   public string Author { get; set; }  
  8.   public double Price { get; set; }  
  9.  
  10.   public Book()  
  11.   { }  
  12.     }  

在Siverlight應(yīng)用中,在舞臺(tái)上布局一個(gè)按扭,用來(lái)發(fā)起遠(yuǎn)程調(diào)用。使用DataGrid控件來(lái)顯示調(diào)用結(jié)果。

 
 
 
 
  1. < USERCONTROL   
  2.     xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"   
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
  5.     Width="400" Height="300"> 
  6.     < CANVAS Background="DarkBlue"> 
  7.  < BUTTON   
  8.     Canvas.Top="10" Canvas.Left="10" 
  9.     Background="Blue" Click="Button_Click"> 
  10.  < /BUTTON> 
  11.   < ?xml:namespace prefix = data />< data:DataGrid   
  12.      x:Name="bookGrid" AutoGenerateColumns="True"> 
  13.     
  14.     < /CANVAS> 
  15. < /USERCONTROL> 

現(xiàn)在這一步很關(guān)鍵,要使Siverlight能夠成功實(shí)現(xiàn)RPC,需要使用FluorineFx所提供的Siverlight庫(kù),不是使用FluorineFx for .NET framework,正確的是使用FluorineFx for Siverlight庫(kù),此庫(kù)位于FluorineFx的安裝目錄x:\FluorineFx\Bin\net\Silverlight2.0\FluorineFx.dll。庫(kù)類(lèi)封裝了Siverlight實(shí)現(xiàn)RPC的相關(guān)API。

 
 
 
 
  1. void onNetStatus(object sender, NetStatusEventArgs e)  
  2. {  
  3.  string code = e.Info["code"] as string;  

和Flex開(kāi)發(fā)一樣,同樣使用NetConnection的call()方法去調(diào)用遠(yuǎn)程服務(wù)方法,不同的是Siverlight中沒(méi)有Resonder去處理方法的返回結(jié)果,而是需要自己定義一個(gè)回調(diào)處理程序去處理返回結(jié)果,此處理程序必須實(shí)現(xiàn)接口IPendingServiceCallback,詳細(xì)如下:

 
 
 
 
  1. private void Button_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.     nc.Call("ServiceLibrary.DataService.GetBookTable", new RpcResultHandler(this));  
  4. }  
  5.  
  6. public void Bind(IList list)  
  7. {  
  8.     Dispatcher.BeginInvoke(delegate()  
  9.     {  
  10.   this.bookGrid.ItemsSource = list;  
  11.     });  
  12. }  
  13. namespace SilverlightApp  
  14. {  
  15.     public class RpcResultHandler : IPendingServiceCallback  
  16.     {  
  17.   MainPage page;  
  18.  
  19.   public RpcResultHandler(MainPage ctl)  
  20.   {  
  21. page = ctl;  
  22.   }  
  23.  
  24.   #region IPendingServiceCallback Members  
  25.  
  26.   public void ResultReceived(IPendingServiceCall call)  
  27.   {  
  28. object result = call.Result;  
  29. ArrayCollection items = result as ArrayCollection;  
  30.  
  31. IList list = new List();  
  32. foreach (var item in items)  
  33. {  
  34.     IDictionary dic = (((FluorineFx.ASObject)(item))) as IDictionary;  
  35.     string Name = dic["Name"].ToString();  
  36.     Book book = new Book  
  37.     {  
  38.   ID = int.Parse(dic["ID"].ToString()),  
  39.   Name = dic["Name"].ToString(),  
  40.   Author = dic["Author"].ToString(),  
  41.   Price = double.Parse(dic["Price"].ToString())  
  42.     };  
  43.     list.Add(book);  
  44. }  
  45. page.Bind(list);  
  46.   }  
  47.  
  48.   #endregion  
  49.     }  

IPendingServiceCallback接口中的ResultReceived()方法專(zhuān)門(mén)用來(lái)處理RPC調(diào)用的結(jié)果,這里將返回結(jié)果通過(guò)相應(yīng)的解析處理后回調(diào)Siverlight應(yīng)用中的Bind()方法,實(shí)現(xiàn)將返回的結(jié)果綁定到Siverlight控件DataGrid上。程序運(yùn)行截圖:

FluorineFx庫(kù)參考文獻(xiàn):http://blog.fluorinefx.com/?p=17

本文示例代碼下載:RPCSolution.rar


當(dāng)前名稱(chēng):用FluorineFx庫(kù)實(shí)現(xiàn)Silverlight遠(yuǎn)程過(guò)程調(diào)用
網(wǎng)站URL:http://www.5511xx.com/article/cdpchoj.html