C# Remoting的一个简单例子

.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端:

1using System;
 2using System.Runtime;
 3using System.Runtime.Remoting;
 4using System.Runtime.Remoting.Channels;
 5using System.Runtime.Remoting.Channels.Tcp;
 6using RemoteSample;
 7
 8namespace 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端:

1using System;
 2using System.Runtime.Remoting;
 3using System.Runtime.Remoting.Channels;
 4using System.Runtime.Remoting.Channels.Tcp;
 5using RemoteSample;
 6
 7namespace 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是这样简单。

时间: 2024-10-07 03:19:20

C# Remoting的一个简单例子的相关文章

关于Remoting的一个简单的调用列子

关于Remoting,在.net framework  2.0开始的,到3.5已经集成到WCF中,可一些老的项目还是用到了,现在写一个简单的例子帮助你去改一些比较老的项目. Remoting就是客户端,通过服务器端去访问方法,符合分布式开发.下面将例子. 1.首先定义类库,也就是我们到时候要调用的方法. /// <summary>    /// 允许在支持远程处理的应用程序中跨应用程序域边界的访问对象    /// 必须继承MarshalByRefObject    /// </summ

从一个简单例子来理解js引用类型指针的工作方式

? 1 2 3 4 5 6 7 <script> var a = {n:1};  var b = a;   a.x = a = {n:2};  console.log(a.x);// --> undefined  console.log(b.x);// --> [object Object]  </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?".&

C语言多线程的一个简单例子

多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> void * print_a(void *); void * print_b(void *); int main(){ pthread_t t0; pthread_t t1; // 创建线程A if(pthread_creat

生产者与消费者的一个简单例子

生产者 #include<fstream> #include<iostream> #include<Windows.h> using namespace std; int main(void) { ofstream out; const char ch = '*'; long long k = 0; DWORD64 time = GetTickCount64(); while (true) { if (GetTickCount64() - time > 5000)

PyQt安装与一个简单例子

PyQt在Windows+Visual Studio下安装所需文件如下: python-2.7.3.msi (www.python.org/download) sip-4.14.2.zip (www.riverbankcomputing.co.uk/software/sip/download) PyQt-Py2.7-x86-gpl-4.9.6-1.exe(www.riverbankcomputing.co.uk/software/pyqt/download) 安装方法: 首先安装python2.

词法分析程序 LEX和VC6整合使用的一个简单例子

词法分析的理论知识不少,包括了正规式.正规文法.它们之间的转换以及确定的有穷自动机和不确定的有穷自动机等等... 要自己写一个词法分析器也不会很难,只要给出了最简的有穷自动机,就能很方便实现了,用if.switch-case来写一通所谓的状态转换就可以,我近期会写一个简单的词法分析程序来作为例子... 现在已经有人发明了一个叫LEX的工具让你去应用,那我们就省了不少力气,毕竟没到万不得已的时候,我们都没必要重新发明轮子,从另一个角度来说,使用工具是我们人类知识继承的一种方法,也是我们比其他动物优

一个简单例子了解使用互斥量线程同步

在刚开始学习学习线程同步时总是认为两个线程或是多个线程共同运行,但是那样是做的. 同步就是协同步调,按预定的先后次序进行运行.如:你说完,我再说. "同"字从字面上容易理解为一起动作. 其实不是,"同"字应是指协同.协助.互相配合. 如进程.线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行:B依言执行,再将结果给A:A再继续操作. 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它

netsh interface portproxy的一个简单例子

netsh interface portproxy的微软帮助文档地址: https://technet.microsoft.com/zh-cn/library/cc776297(WS.10).aspx#BKMK_1 下面是一个简单的例子: //显示所有 portproxy 参数,包括 v4tov4.v4tov6.v6tov4 和 v6tov6 的端口/地址对. C:\>netsh interface portproxy show all //因为没有配置过它,所以没有东西可以显示. //添加配置

Spring MVC:使用SimpleUrlHandlerMapping的一个简单例子

实现一个控制器ShirdrnController,如下所示: package org.shirdrn.spring.mvc; import java.util.Date; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log;import org.apache.commons.logging.