首页 > Windows开发 > 详细

C# Remoting的一个简单例子

时间:2019-10-11 10:33:19      阅读:78      评论:0      收藏:0      [点我收藏+]
 

.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是这样简单。

C# Remoting的一个简单例子

原文:https://www.cnblogs.com/wwwbdabc/p/11652053.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!