日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

一步一步學Remoting之一:從簡單開始

系統 1918 0
一、Remoting的優缺點?
優點:
1、能讓我們進行分布式開發
2、Tcp通道的Remoting速度非常快
3、雖然是遠程的,但是非常接近于本地調用對象
4、可以做到保持對象的狀態
5、沒有應用程序限制,可以是控制臺,winform,iis,windows服務承載遠程對象
缺點:
1、非標準的應用因此有平臺限制
2、脫離iis的話需要有自己的安全機制

二、Remoting和Web服務的區別?
??? ASP.NET Web 服務基礎結構通過將 SOAP 消息映射到方法調用,為 Web 服務提供了簡單的 API。通過提供一種非常簡單的編程模型(基于將 SOAP 消息交換映射到方法調用),它實現了此機制。ASP.NET Web 服務的客戶端不需要了解用于創建它們的平臺、對象模型或編程語言。而服務也不需要了解向它們發送消息的客戶端。唯一的要求是:雙方都要認可正在創建和使用的 SOAP 消息的格式,該格式是由使用 WSDL 和 XML 架構 (XSD) 表示的 Web 服務合約定義來定義的。?
??? . NET Remoting 為分布式對象提供了一個基礎結構。它使用既靈活又可擴展的管線向遠程進程提供 .NET 的完全對象語義。ASP.NET Web 服務基于消息傳遞提供非常簡單的編程模型,而 .NET Remoting 提供較為復雜的功能,包括支持通過值或引用傳遞對象、回調,以及多對象激活和生命周期管理策略等。要使用 .NET Remoting,客戶端需要了解所有這些詳細信息,簡而言之,需要使用 .NET 建立客戶端。.NET Remoting 管線還支持 SOAP 消息,但必須注意這并沒有改變其對客戶端的要求。如果 Remoting 端點提供 .NET 專用的對象語義,不管是否通過 SOAP,客戶端必須理解它們。

三、最簡單的Remoting的例子
1、遠程對象:
建立類庫項目:RemoteObject

using ?System;

namespace ?RemoteObject
{
????
public ? class ?MyObject:MarshalByRefObject
????{
????????
public ? int ?Add( int ?a, int ?b)
????????{
????????????
return ?a + b;
????????}
????}
}

2、服務端
建立控制臺項目:RemoteServer

using ?System;
using ?System.Runtime.Remoting;

namespace ?RemoteServer
{
????
class ?MyServer
????{
????????[STAThread]
????????
static ? void ?Main( string []?args)
????????{
????????????RemotingConfiguration.Configure(
" RemoteServer.exe.config " );
????????????Console.ReadLine();
????????}
????}
}

建立配置文件:app.config
< configuration >
????
< system .runtime.remoting >
????????
< application? name ="RemoteServer" >
????????????
< service >
????????????????
< wellknown? type ="RemoteObject.MyObject,RemoteObject" ?objectUri ="RemoteObject.MyObject"
????????????????????mode
="Singleton" ? />
????????????
</ service >
????????????
< channels >
????????????????
< channel? ref ="tcp" ?port ="9999" />
????????????
</ channels >
????????
</ application >
????
</ system.runtime.remoting >
</ configuration >

3、客戶端:
建立控制臺項目:RemoteClient

using ?System;

namespace ?RemoteClient
{
????
class ?MyClient
????{
????????[STAThread]
????????
static ? void ?Main( string []?args)
????????{
????????????RemoteObject.MyObject?app?
= ?(RemoteObject.MyObject)Activator.GetObject( typeof (RemoteObject.MyObject),System.Configuration.ConfigurationSettings.AppSettings[ " ServiceURL " ]);
????????????Console.WriteLine(app.Add(
1 , 2 ));
????????????Console.ReadLine();
????????}
????}
}

建立配置文件:app.config

< configuration >
?
< appSettings >
?
< add? key ="ServiceURL" ?value ="tcp://localhost:9999/RemoteObject.MyObject" />
?
</ appSettings >
</ configuration >


4、測試
在最后編譯的時候會發現編譯報錯:
1、找不到app.Add()
2、找不到RemoteObject
這是因為客戶端RemoteClient沒有添加RemoteObject的引用,編譯器并不知道遠程對象存在哪些成員所以報錯,添加引用以后vs.net會在客戶端也保存一個dll,可能大家會問這樣如果對遠程對象的修改是不是會很麻煩?其實不麻煩,對項目編譯一次vs.net會重新復制dll。
然后直接運行客戶端會出現“目標主機拒絕”的異常,也說明了通道沒有打開
運行服務端再運行客戶端出現“找不到程序集RemoteObject”!回頭想想可以發現我們并在服務端對RemoteObject添加引用,編譯的時候通過是因為這個時候并沒有用到遠程對象,大家可能不理解運行服務端的時候也通過?這是因為沒有這個時候還沒有激活遠程對象。理所當然,對服務端要添加引用遠程對象,畢竟我們的對象是要靠遠程承載的。
現在再先后運行服務端程序和客戶端程序,客戶端程序顯示3,測試成功。

四、結束語
我們通過一個簡單的例子實現了最簡單的remoting,對其實質沒有做任何介紹,我想通過例子入門才是最簡單的。

?

TrackBack:http://www.cnblogs.com/lovecherry/archive/2005/05/19/158784.html

一步一步學Remoting之一:從簡單開始


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 昌乐县| 明光市| 承德县| 桂东县| 德州市| 甘谷县| 曲周县| 稷山县| 定安县| 桂林市| 四会市| 蓝田县| 韩城市| 东台市| 香河县| 桂平市| 乌兰察布市| 平舆县| 博乐市| 苏尼特右旗| 新巴尔虎左旗| 社旗县| 道真| 榆树市| 石城县| 沙坪坝区| 永昌县| 密山市| 林州市| 页游| 冀州市| 民乐县| 武穴市| 龙泉市| 兰西县| 扎兰屯市| 博乐市| 宁阳县| 陈巴尔虎旗| 昭苏县| 无为县|