国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

.NET Remoting學(xué)習(xí)筆記(三)信道

2019-11-17 01:47:05
字體:
供稿:網(wǎng)友

.NET Remoting學(xué)習(xí)筆記(三)信道

目錄

  • .NET Remoting學(xué)習(xí)筆記(一)概念
  • .NET Remoting學(xué)習(xí)筆記(二)激活方式
  • .NET Remoting學(xué)習(xí)筆記(三)信道

參考:♂風(fēng)車車.Net

.NET Framework 遠程處理基礎(chǔ)結(jié)構(gòu)提供下列信道實現(xiàn):

  • ipcChannel
  • TcpChannel
  • HttpChannel

IpcChannel

IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 進程間通信 (IPC) 系統(tǒng)在同一計算機上的應(yīng)用程序域之間傳輸消息。在同一計算機上的應(yīng)用程序域之間進行通信時,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本機應(yīng)用之間通信。所以,在客戶端和服務(wù)端在同一臺機器時,我們可以通過注冊IPCChannel來提高Remoting的性能。但如果客戶端和服務(wù)端不在同一臺機器時,我們不能注冊IPCChannel。

IpcChannel 執(zhí)行下列功能:

  • 使用命名管道在發(fā)送方和接收方之間通信。
  • 支持以二進制格式和行業(yè)標準 SOAP 序列化格式編碼負載。
  • 生成并使用對象引用的 ChannelDataStore。
  • 支持模擬和委托。
  • 支持在命名管道上利用訪問控制列表 (ACL) 來提供高級訪問控制。

TcpChannel

TcpChannel 類使用二進制格式化程序?qū)⑺邢⑿蛄谢癁槎M制流,并使用 TCP 協(xié)議將該流傳輸至目標統(tǒng)一資源標識符 (URI)。

TcpChannel 執(zhí)行下列功能:

  • 使用 TCP 套接字在發(fā)送方和接收方之間通信。
  • 支持以二進制格式和行業(yè)標準 SOAP 序列化格式編碼負載。
  • 生成并使用對象引用的 ChannelDataStore。
  • 支持模擬和委托。
  • 支持 SSPI 加密。

HttpChannel

HttpChannel 類使用 SOAP 協(xié)議在遠程對象之間傳輸消息。所有消息都通過 SoapFormatter 傳遞,此格式化程序會將消息轉(zhuǎn)換為 xml 并進行序列化,同時向數(shù)據(jù)流中添加所需的 SOAP 標頭。如果還指定了二進制格式化程序,則會創(chuàng)建二進制數(shù)據(jù)流。隨后,將使用 HTTP 協(xié)議將數(shù)據(jù)流傳輸至目標 URI。

HttpChannel 符合 SOAP 1.1 標準,它執(zhí)行下列功能:

  • 通過將 HTTP 協(xié)議用作傳輸在發(fā)送方和接收方之間通信。
  • 支持以 SOAP(一種 XML 編碼標準)和二進制格式編碼負載。
  • 將接收方設(shè)置為通過 asp.net 和 TCP 套接字接收 HTTP 請求并發(fā)送 HTTP 響應(yīng)。
  • 生成并使用對象引用的 ChannelDataStore。
  • 支持模擬和委托。
  • 支持 SSPI 加密。

下面貼代碼:

1.定義遠程對象

using System;using System.Runtime.Remoting.Metadata;/*code 釋迦苦僧*/namespace MessageMarshal{    /*創(chuàng)建發(fā)送消息委托*/    public delegate void SendMessageHandler(string messge);    [Serializable]    public class TestMessageMarshal : MarshalByRefObject    {         PRivate Guid ID { get; set; }        /*新建對象實例時重新創(chuàng)建標識編號*/        public TestMessageMarshal()        {            ID = Guid.NewGuid();        }        /*創(chuàng)建發(fā)送消息事件*/        public static event SendMessageHandler SendMessageEvent;        /*發(fā)送消息*/        [SoapMethod(XmlNamespace = "MessageMarshal", SoapAction = "MessageMarshal#SendMessage")]        public void SendMessage(string messge)        {            if (SendMessageEvent != null)                SendMessageEvent(ID.ToString() + "/t" + messge);        }    }}

2.定義服務(wù)端

using System;using System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Http;using System.Runtime.Remoting.Channels.Ipc;using System.Runtime.Remoting.Channels.Tcp;using MessageMarshal;namespace TestRemotingServer{    /*code:釋迦苦僧*/     class Program    {        static void Main(string[] args)        {            //IpcChannel channel_ipc = new IpcChannel("localhost:8226");            //HttpChannel channel_http = new HttpChannel(8226);            TcpChannel channel_tcp = new TcpChannel(8226);            /*注冊通道服務(wù)端*/            ChannelServices.RegisterChannel(channel_tcp, false);            RemotingConfiguration.applicationName = "test";            RemotingConfiguration.RegisterActivatedServiceType(typeof(TestMessageMarshal));               Console.WriteLine("started ...");             /*接收客戶端事件*/             TestMessageMarshal.SendMessageEvent+=new SendMessageHandler(TestMessageMarshal_SendMessageEvent);            Console.Read();        }                 static void TestMessageMarshal_SendMessageEvent(string messge)        {            Console.WriteLine(messge);        }    }}

3.定義客戶端:

using System;using System.Runtime.Remoting;using System.Runtime.Remoting.Channels;using System.Runtime.Remoting.Channels.Http;using System.Runtime.Remoting.Channels.Ipc;using System.Runtime.Remoting.Channels.Tcp;using System.Threading;/*code 釋迦苦僧*/namespace TestRemotingClient{    class Program    {        static void Main(string[] args)        {            //IpcChannel channel = new IpcChannel();            //HttpChannel channel_http = new HttpChannel();            TcpChannel channel_tcp = new TcpChannel();            ChannelServices.RegisterChannel(channel_tcp, false);            /*注冊通道 的 遠程處理類型*/            //RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "ipc://localhost:8226/test");            //RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "http://localhost:8226/test");            RemotingConfiguration.RegisterActivatedClientType(typeof(MessageMarshal.TestMessageMarshal), "tcp://localhost:8226/test");            /*創(chuàng)建消息實體*/            MessageMarshal.TestMessageMarshal TestMessage = new MessageMarshal.TestMessageMarshal();            while (true)            {                TestMessage.SendMessage("DateTime.Now:" + System.DateTime.Now.ToString());                Console.WriteLine("send message...");                Thread.Sleep(2000);            }        }    }}

4.測試

.NET Remoting 咱只寫三篇 應(yīng)該能給大家?guī)硇┝私猓瑧?yīng)對面試

作者:釋迦苦僧 出處:http://m.survivalescaperooms.com/woxpp/p/3997984.html 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盖州市| 鄂尔多斯市| 汉沽区| 疏附县| 千阳县| 定远县| 互助| 巴林右旗| 通山县| 萝北县| 阳城县| 江津市| 海安县| 盈江县| 河南省| 甘谷县| 伊春市| 蚌埠市| 云霄县| 南阳市| 赣榆县| 宁波市| 石台县| 乐平市| 庆城县| 化州市| 新建县| 射洪县| 赣州市| 班戈县| 文水县| 屯昌县| 五寨县| 临海市| 卓尼县| 阿图什市| 尚义县| 敦煌市| 鹰潭市| 普格县| 武宁县|