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

C#遠程調用實現案例

編輯:.NET實例教程

C#實現遠程調用主要用到“System.Runtime.Remoting”這個東西。下面從三個方面給於源碼實例。

·服務端:



using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting;

namespace RemoteSample
...{
    class server
    ...{
        static int Main(string[] args)
        ...{
            //注冊通道
            TcpChannel chan = new TcpChannel(8085);        
            ChannelServices.RegisterChannel(chan);
            string sshan = chan.ChannelName;
            System.Console.WriteLine(sshan);
            //注冊遠程對象,即激活.
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteSample.HelloServer), "SayHello", WellKnownObjectMode.SingleCall);
            System.Console.WriteLine("Hit <ennter> to exit...");
            System.Console.ReadLine();
            return 0;
>        }
    }
}

·客戶端:



using System.Runtime.Remoting.Channels.Tcp;
using System.Runtime.Remoting.Channels;

namespace RemoteSample
...{
    public class ClIEnt
    ...{
        public static int Main(string[] args)
        ...{
            TcpChannel chan = new TcpChannel();
            ChannelServices.RegisterChannel(chan);
            HelloServer obj =(HelloServer)Activator.GetObject(typeof(HelloServer), "tcp://localhost:8085/SayHello");
            if (obj == null)
                System.Console.WriteLine("Could   not   locate   server");
            else Console.WriteLine(obj.HelloMethod("Caveman"));
            return 0;   

        }

    }

·遠程對象:(重點),該對象是一個dll的程序集,同時被客戶端和服務器端引用。



namespace RemoteSample
...{
    //客戶端獲取到服務端的對象實際是一個對象的引用,因此必須繼承:MarshalByRefObject
    public class HelloServer : MarshalByRefObject
    ...{
        public HelloServer()
        ...{
            Console.WriteLine("HelloServer   activated");
        }

        public String HelloMethod(String name)
        ...{
            Console.WriteLine("Hello.HelloMethod   :   {0}", name);
            return "Hi there " + name;
        }

        //說明1:在Remoting中的遠程對象中,如果還要調用或傳遞某個對象,例如類,或者結構,則該類或結構則必須實現串行化Attribute[SerializableAttribute]:
        //說明2:將該遠程對象以類庫的方式編譯成Dll。這個Dll將分別放在服務器端和客戶端,以添加引用
        //說明3:在Remoting中能夠傳遞的遠程對象可以是各種類型,包括復雜的DataSet對象,只要它能夠被序列化
    }

注意上述代碼的注釋,由於遠程服務的特殊性,因此在此做了詳細的批注,怕大伙不理解。

OK。C#的遠程調用就實現完成了,這中應用一般在三層架構中應該比較平常使用。至於這種方式的優缺點,在下還不好說,希望有過實際應用的同志給總結一些,謝謝!!!

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