程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Remoting簡單實例[]

Remoting簡單實例[]

編輯:.NET實例教程

轉載自:[http://user.qzone.QQ.com/51566219]

一、實用類:
1、System.MarshalByRefObject :
      系統中遠程調用的對象必須是從MarshalByRefObject對象中派生出來的;
2、System.Runtime.Remoting.Channels.Tcp.TcpServerChannel :
      服務器端的Tcp信道;
3、System.Runtime.Remoting.Channels.Http.HttpServerChannel :
      服務器端的Http信道;
4、System.Runtime.Remoting.Channels.ChannelServices :
      注冊信道,使之可用於遠程對象;
5、System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnowServiceType :
      指定遠程對象中類的類的類型,客戶機使用的URI和模式;
6、System.Runtime.Remoting.Channels.Tcp.TcpClIEntChannel :
      客戶端的Tcp信道;
7、System.Runtime.Remoting.Channels.Http.HttpClIEntChannel :
      客戶端的Http信道。
二、簡單的示例
1、創建遠程對象,在這裡創建一個dll程序集,這個dll在服務器和客戶機代碼中都會用到。
      創建名為RemoteHello.dll的程序集

using System;
using System.Collections.Generic;
using System.Text;
namespace RemoteHello
{
     public class Hello:System.MarshalByRefObject
     {
         public Hello()
         {
             Console.WriteLine("Constructor called");
         }
         ~Hello()
         {
             Console.WriteLine("Destructor called");
         }
         public string HelloWorld(string name)
         {
             Console.WriteLine("Hello World!");
             return "Hi,

$False$

" + name;
         }
    
     }
}


2、創建服務器。需要引用System.Runtime.Remoting程序集和之前創建的RemoteHello.dll程序集。在此創建名為HelloServer的Console Application。
  
名字空間是對象所需要的。請記住,如果得到System.Runtime.Remoting.Channels.Tcp名字空間不存在的信息,請檢查是否添加了對System.Runtime.Remoting.dll的引用。


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteHello;
namespace HelloService
{
     class HelloServer
     {
         static void Main(string[] args)
         {
             TcpServerChannel channel = new TcpServerChannel(6666);
             //ChannelServices.RegisterChannel(channel);
             ChannelServices.RegisterChannel(channel,false);
             RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello), "HelloWorld", WellKnownObjectMode.SingleCall);
             System.Console.WriteLine("Press Any Key to Exit ! ");
             System.Console.ReadLine();
         }
     }
}

上面代碼中可以用

ChannelServices.RegisterChannel(channel);

ChannelServices.RegisterChannel(channel,false);
但是在.Net Framework 2.0中編譯時會提示
''System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(System.Runtime.Remoting.Channels.IChannel)'' is obsolete: ''Use System.Runtime.Remoting.ChannelServices.RegisterChannel(IChannel chnl, bool ensureSecurity) instead.''

原因是是.Net Framework 2.0新增的函數

System.Runtime.Remoting.C

hannelServices.RegisterChannel(IChannel chnl, bool ensureSecurity)


其中參數:ensureSecurity
如果啟用了安全,則為 true;否則為 false。將該值設置為 false 將不會使在 TCP 或 IPC 信道上所做的安全設置無效。
此外MSDN中注釋:對於 TcpServerChannel,將 esureSecurity 設置為 true 將在 Win98 上引發異常(因為 Wi9x 上不支持安全 tcp 信道);對於 Http 服務器信道,這樣會在所有平台上引發異常(如果想要安全的 http 信道,用戶需要在 IIS 中承載服務)。
3、創建客戶機。需要引用System.Runtime.Remoting程序集和之前創建的RemoteHello.dll程序集
      在此創建名為HelloClIEnt的Console Application

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteHello;
namespace HelloClIEnt
{
     class HelloClIEnt
     {
         static void Main(string[] args)
         {
            
             ChannelServices.RegisterChannel(new TcpClIEntChannel(), false);
             Hello obj = (Hello)Activator.GetObject(typeof(Hello), "tcp://localhost:8085/Hi");
");
             if (obj == null)
             {
                 Console.WriteLine("False to Link Server.");
                 return;
             }
             for (int i = 0; i < 6; i++)
             {
                 Console.WriteLine(obj.HelloWorld("MadRam.neo"));
             }
         }
     }
}
  
注:
1、本實例在客戶端運行HelloClIEnt,但是要在服務器上遠程對象注冊之後,使服務器上的HelloClIEnt服務一直處於運行狀態,直到按任意鍵為止,否則會出錯!
2、將代碼中的“tcp://localhost:8085/Hi"”換成其他網址就可以運行在網絡上,比如換成:tcp://192.168.3.235:8085/Hi"。
3、能作為遠程服務的只能是dll,exe可不行; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved