`

远程调用——Remoting(C# )(转)

 
阅读更多

.Net对于远程调用提供了两种方法:RemotingWebService

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

 1namespace 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}

(其中RemoteObject是Client和Server端都知道的一种自定义类型),将其编译为一个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是这样简单。

 

 

分享到:
评论

相关推荐

    C# Web服务高级编程——使用.NET Remoting和ASP.NET创建Web服务

    通过.NET Remoting,你可以创建可远程访问的对象,这些对象可以像本地对象一样被调用,极大地扩展了C#应用程序的能力。Remoting提供了多种通信模式,如单向调用、请求/响应模式和双向通信,支持多种传输协议,如HTTP...

    remoting 示例(C#源码)

    《.NET Remoting技术详解——基于C#的SAO与CAO示例分析》 .NET Remoting是微软.NET Framework提供的一种远程通信技术,它允许不同的应用程序域(AppDomain)之间进行交互,无论这些应用程序是否在同一台机器上。...

    winform 多服务器Remoting源码

    3. **接口(Interfaces)**:为了进行远程调用,服务器端的对象需要实现特定的接口,这些接口定义了可供客户端调用的方法。源码中应该包含定义这些接口的代码。 4. **代理(Proxies)**:客户端使用的对象实际上是...

    分布式 RMI远程调用

    分布式RMI(Remote Method Invocation)远程调用是一种在分布式系统中实现对象间通信的技术,它允许一个对象在某个进程中调用另一个位于不同进程或者不同计算机上的对象的方法,从而实现跨网络的对象交互。在C#中,...

    ASP.NET(c#)remoting视频教程

    - 创建可远程调用的类和对象 - 配置和选择适当的通道 - 实现早期和晚期激活 - 客户端和服务器端代码示例 - 使用配置文件设置Remoting - 跨域安全性和身份验证 - 性能评估和优化技巧 通过学习这个视频教程,开发者...

    C# Remoting编程

    这个技术为分布式应用程序的开发提供了强大的支持,使得对象可以像本地调用一样透明地远程调用。下面将详细介绍C# Remoting的基本概念、工作原理以及接口DLL方式实现远程通讯的实例。 一、C# Remoting基础知识 1. ...

    Remoting双向通信V4.0.rar

    2. **激活模式**:Remoting支持两种激活模式——远程激活(Remote Activation)和自激活(Self-Activation)。远程激活时,客户端请求服务器创建一个对象实例;自激活时,对象可以在客户端或服务器上自行创建,然后...

    remoting的例子

    在IT行业中,C# Remoting是一种允许不同进程间(IPC)通信的技术,它为.NET应用程序提供了透明的远程方法调用(RPC)。这个“remoting的例子”涵盖了如何在两个独立的进程——firstexe(服务器端)和secondexe...

    vs2010简单实现Remoting源码

    2. **Client端代码**:包含创建代理对象并进行远程调用的代码。 3. **配置文件**:可能有app.config或web.config,用于配置服务器地址、通道类型等信息。 4. **示例用例**:展示如何启动服务器,连接到服务器,以及...

    使用.NET Remoting 建立分布式应用程序(三)

    客户端通过代理对象与服务器通信,代理对象负责将本地方法调用转换为远程调用。 2. **服务器**: 服务器端包含实际实现的远程对象,它接收并处理来自客户端的请求。 3. **通道服务**: 通道服务是通信协议的实现,如...

    Remoting的例子

    1. 定义远程接口:定义一个接口,用于暴露远程调用的方法。 ```csharp public interface IMyRemoteService : MarshalByRefObject { void DoSomething(); } ``` 2. 实现远程接口:创建类实现该接口,并添加具体...

    Delphi与C#的混合编程

    4. **Remoting和WCF**:如果需要远程调用,可以利用.NET Remoting或Windows Communication Foundation (WCF)。这两种技术允许跨进程甚至跨网络的通信,使得Delphi和C#的组件可以像在同一程序中一样工作。 5. **第三...

    Remoting源代码

    4. **激活类型(Activation Types)**:Remoting支持两种激活方式——远程激活和瞬态激活。远程激活的对象在客户端首次请求时在服务器上创建,并且在整个会话期间保持活动状态。瞬态激活的对象在每次请求时都会创建...

    DotnetRemoting技术实例实析.rar

    1. **对象激活**:.NET Remoting支持两种对象激活方式——Singleton(单例)和Singleton Per Call(每次调用时创建新实例)。Singleton模式确保无论在哪里调用,都返回同一个远程对象的引用;而Singleton Per Call则...

    remoting 基础知识

    5. 类型安全:Remoting保证了类型安全,因为对象序列化和反序列化过程中,类型信息会被保留,确保远程调用的对象与本地调用的具有相同的类型。 6. 自定义串行化:Remoting允许开发者自定义对象的串行化和反串行化...

    .net remoting资料

    3. **对象激活**:.NET Remoting支持两种激活方式——远程激活(Remote Activation)和自激活(Self Activation)。远程激活是服务器端创建对象,客户端通过引用调用;自激活是客户端直接创建远程对象实例。 **二、...

    C# 用真实需求,手把手教你写面向对象的代码

    至于压缩包中的"DFS"和"Remoting",它们分别代表深度优先搜索(Depth-First Search)和远程方法调用(Remoting)。 1. **深度优先搜索(DFS)**:DFS是一种常用的图或树遍历算法,常用于解决路径查找、遍历所有可能...

    C# 编写的简易聊天器

    - **透明性**:Remoting提供了高度的透明性,使得开发者可以像调用本地对象一样调用远程对象,极大地简化了分布式系统的开发。 4. **事件同步**:在聊天器应用中,客户端之间的事件同步是关键。当一个客户端发送...

    C#XML入门经典 C#编程人员必备的XML技能.part2

    C# XML入门经典——C#编程人员必备的XML技能 作者:[美]Stewart Fraser, Steven 著,毛尧飞,崔伟 译 出版社:清华大学出版社 出版时间:2003年11月 第1章 在C#中使用XML的原因 <br>1.1 使用XML的原因...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)

    - **远程代理**:代理远程服务器的对象,使得客户端可以像操作本地对象一样操作远程对象,例如.NET Remoting或Web服务。 - **安全代理**:用于控制对对象的访问权限,确保只有具有足够权限的用户才能访问特定功能...

Global site tag (gtag.js) - Google Analytics