博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Remoting的一个简单例子
阅读量:6908 次
发布时间:2019-06-27

本文共 2149 字,大约阅读时间需要 7 分钟。

.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用的对象:

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

From : 

你可能感兴趣的文章
为知笔记MathJax使用教程
查看>>
@RequestParam注解的使用
查看>>
JQ_简单图片拖动
查看>>
【直视骄阳】生命的留言
查看>>
家居建材企业信息化管理路在何方?
查看>>
华为第1书:《华为交换机学习指南》全面预售中
查看>>
视频:easyhadoop聚会hive和phpHiveAdmin部分
查看>>
shell脚本:不登陆KVM虚拟机,修改虚拟机网卡IP地址
查看>>
寄云-Paas云服务体验
查看>>
阿里巴巴天池大数据竞赛黄金联赛全面开战,全球同步报名,只为寻找最聪明的你!...
查看>>
性能测试loadrunner场景问题之socket
查看>>
60秒内快速搭建完整zabbix3.4.6监控系统
查看>>
RHEL6入门系列之十二,vi编辑器
查看>>
为什么不能用memcached存储Session?
查看>>
安装windows server Hyper-v
查看>>
辞职后五险一金怎么处理?收藏下来吧~早晚用得到
查看>>
spring加载ApplicationContext.xml的四种方式
查看>>
fdisk分区命令详解与fdisk非交互式分区
查看>>
Windows 8 消费者预览版 安装图解
查看>>
配置 Project Server 2010 与 Microsoft Exchange Server 2010 结合使用
查看>>