A simple example of C # Remoting in C # Remoting is a simple example

C # Remoting is a simple example

 

For .Net remoting provides two methods: Remoting and WebService.
WebService is now in full swing, especially those with a more popular architecture: Winform + WebService (Java, .Net ),
I have done a project like this is a distributed, cross-platform, excellent user experience, these three who combine is not very attractive?
However, I will just say Remoting, Remoting has the following characteristics:
1, Remoting channel very fast speed Tcp
2, though remote, but very close to the local call object
3, can be done to maintain the state of the object
4, no application restrictions may be console, winform, iis, windows service carrying the remote object
disadvantages:
1, instead of the standard applications, so there are restrictions platform
2, from iis then need its own security mechanisms
can be seen, compared to the WebService, Remoting more suitable for small and medium sized LAN applications, but not for enterprise-class applications.
The following presents a very simple Sample:
target Remoting used:

namespace RemoteSample
 2 {
 3    public class RemoteObject : System.MarshalByRefObject
 4    {
 5        public RemoteObject()
 6        {
 7            System.Console.WriteLine("New Referance Added!");
 8        }
 9
10        public int sum(int a, int b)
11        {
12            return a + b;
13        }
14    }
15}

Compile it into a lib file: csc / t: Library RemoteObject.cs

Server side:

 1 using System;
 2 using System.Runtime;
 3 using System.Runtime.Remoting;
 4 using System.Runtime.Remoting.Channels;
 5 using System.Runtime.Remoting.Channels.Tcp;
 6 using RemoteSample;
 7
 8 namespace RemoteSampleServer
 9 {
10    public class RemoteServer
11    {
12        public static void Main(String[] args)
13        {
14             TcpServerChannel channel = new TcpServerChannel(6666);
15             ChannelServices.RegisterChannel(channel);
16             RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
17                 "RemoteObject", WellKnownObjectMode.SingleCall);
18             System.Console.WriteLine("Press Any Key");
19             System.Console.ReadLine();
20         }
21    }
22}

Compile it into an exe file: csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs

Client side:

 1 using System;
 2 using System.Runtime.Remoting;
 3 using System.Runtime.Remoting.Channels;
 4 using System.Runtime.Remoting.Channels.Tcp;
 5 using RemoteSample;
 6
 7 namespace RemoteSampleClient
 8 {
 9    public class RemoteClient
10    {
11        public static void Main(string[] args)
12        {
13            ChannelServices.RegisterChannel(new TcpClientChannel());
14            RemoteObject remoteobj = (RemoteObject)Activator.GetObject(typeof(RemoteObject),
15            "tcp://localhost:6666/RemoteObject");
16            Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
17            Console.ReadLine();
18        }
19    }
20}

Similarly, it is compiled into exe file: csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs

Well, first run generated RemoteServer.exe and RemoteClient.exe, you will find that Remoting is so simple.

.Net对于远程调用提供了两种方法:Remoting和WebService。
WebService现在是如火如荼,特别是有一种比较流行的架构:Winform+WebService(Java、.Net),
我曾经做过的一个项目就是这样子的,分布式、跨平台、极佳的用户体验,这三者结合起来是不是很诱人?
不过,这里我只说Remoting,Remoting具有以下特点:
1、Tcp通道的Remoting速度非常快
2、虽然是远程的,但是非常接近于本地调用对象
3、可以做到保持对象的状态
4、没有应用程序限制,可以是控制台,winform,iis,windows服务承载远程对象
缺点:
1、不是标准的应用,因此有平台限制
2、脱离iis的话需要有自己的安全机制
可以看出来,比起WebService,Remoting更适合于中小型局域网应用,而不适用于企业级的应用。
下面给出一个极其简单的Sample:
Remoting用的对象:

namespace RemoteSample
 2 {
 3    public class RemoteObject : System.MarshalByRefObject
 4    {
 5        public RemoteObject()
 6        {
 7            System.Console.WriteLine("New Referance Added!");
 8        }
 9
10        public int sum(int a, int b)
11        {
12            return a + b;
13        }
14    }
15}

将其编译为一个lib文件:csc /t:library RemoteObject.cs

Server端:

 1 using System;
 2 using System.Runtime;
 3 using System.Runtime.Remoting;
 4 using System.Runtime.Remoting.Channels;
 5 using System.Runtime.Remoting.Channels.Tcp;
 6 using RemoteSample;
 7
 8 namespace RemoteSampleServer
 9 {
10    public class RemoteServer
11    {
12        public static void Main(String[] args)
13        {
14             TcpServerChannel channel = new TcpServerChannel(6666);
15             ChannelServices.RegisterChannel(channel);
16             RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
17                 "RemoteObject", WellKnownObjectMode.SingleCall);
18             System.Console.WriteLine("Press Any Key");
19             System.Console.ReadLine();
20         }
21    }
22}

将其编译为一个exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs

Client端:

 1 using System;
 2 using System.Runtime.Remoting;
 3 using System.Runtime.Remoting.Channels;
 4 using System.Runtime.Remoting.Channels.Tcp;
 5 using RemoteSample;
 6
 7 namespace RemoteSampleClient
 8 {
 9    public class RemoteClient
10    {
11        public static void Main(string[] args)
12        {
13            ChannelServices.RegisterChannel(new TcpClientChannel());
14            RemoteObject remoteobj = (RemoteObject)Activator.GetObject(typeof(RemoteObject),
15            "tcp://localhost:6666/RemoteObject");
16            Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
17            Console.ReadLine();
18        }
19    }
20}

同样的,将其编译为exe文件:csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs

好了,一次运行生成的RemoteServer.exe和RemoteClient.exe,你就会发现原来Remoting是这样简单。

Guess you like

Origin www.cnblogs.com/wwwbdabc/p/11652053.html