借助基维百科给它的定义如下:

NET Remoting 是微软 .NET Framework 中的一种网络通讯技术,与 XML Web Service 不同的是,它可以使用 SOAP 以外的协定来通讯,而在伺服端和用户端之间所操作的方法近乎相同,用户端可以不必考虑使用的协定,即可存取伺服端所开放的物件。这个技术与是由Distributed COM所发展而来的,与DCOM最大的不同是,DCOM有限制使用 TCP Port,但.NET Remoting 可以选择使用 TCP 或 HTTP 的方式通讯,而资料可以利用 SOAP 或二进制传输方式在网络上流动,二进制的传输效能是 SOAP 所不能比的,但 SOAP 却可以得到和 Web Service 相互沟通的能力,因此 .NET Remoting 的设计弹性较大。

.NET Remoting 技术目前已整合到 Windows Communication Foundation 中。

原理

.NET Remoting 使用了 Channel 和 Serialization 机制来串接两台机器间的物件,Channel 是负责处理网络通讯的部份,而 Serialization 则是处理物件与串流资料的处理工作。

  • Channel 支援了 IPC(行程间通讯)、TCP 与 HTTP 通讯协定[1]
  • Serialization 支援二进制(binary)或 XML(SOAP)通讯协定的资料串流[2]

当伺服端设定好使用的通道以及协定后,用户端必须要跟随伺服端的设定,并且依伺服端决定的活化模型来启动,而程式设计的方法和一般呼叫元件般简单。

public static void Main()
{
RemotingConfiguration.Configure("Client.exe.config"); // configure Remoting configuration.
RemotableType remoteObject = new RemotableType(); // create remoting object.
Console.WriteLine(remoteObject.SayHello()); // call remoting object's method.
}

组态设定

.NET Remoting 的设计理念,就是为了要简化网络上的物件通讯,而且要让开发人员不必太过于在通讯的底层伤脑筋,因此在网络通讯协定上做了许多的包装,并且允许在 Configuration File(app.config)中直接设定,或是由 .NET Remoting 的 Configuration API 来设定即可,故组态设定的选项复杂度较高,设计较复杂的 .NET Remoting 应用程式在组态的设定上往往会相当复杂。

以下为设定 .NET Remoting 用户端的范例设定:

<configuration>
<system.runtime.remoting>
<application>
<client>
<wellknown
type="RemotableType, RemotableType"
url="http://localhost:8989/RemotableType.rem"
/>
</client>
</application>
</system.runtime.remoting>
</configuration>

活化模型

活化(Activation)是指用户端启动伺服端元件的方式,.NET Remoting 中支援了两种方式[3]

  • Single-Call:在每一次用户端呼叫时都生成一个执行个体。
  • Single-ton:在第一次呼叫时就生成执行个体,之后每一次呼叫都使用相同的执行个体。

物件传递

在 .NET Remoting 中,不论是传值或传址,每一个物件都必须要继承 System.MarshalByRefObject 类别,才可以利用 .NET Remoting 来传输[4]

以下程式码为服务端的 Remoting 元件:

// RemotableType.cs
using System;
public class RemotableType : MarshalByRefObject // Remoting 物件必須繼承自 System.MarshalByRefObject 類別。
{
public string SayHello()
{
Console.WriteLine("RemotableType.SayHello() was called!");
return "Hello, world";
}
}

何为.Net Remoting【转】的更多相关文章

  1. spring remoting源码分析--Hessian分析

    1. Caucho 1.1 概况 spring-remoting代码的情况如下: 本节近分析caucho模块. 1.2 分类 其中以hession为例,Hessian远程服务调用过程: Hessian ...

  2. Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案

    1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...

  3. VS2015 出现 .NETSystem.Runtime.Remoting.RemotingException: TCP 错误

    错误内容: 界面显示内容为: .NET�������������System.Runtime.Remoting.RemotingException: TCP 淇¢亾鍗忚鍐茬獊: 搴斾负鎶ュご銆� 鍦 ...

  4. .Net中Remoting通信机制简单实例

    .Net中Remoting通信机制 前言: 本程序例子实现一个简单的Remoting通信案例 本程序采用语言:c# 编译工具:vs2013工程文件 编译环境:.net 4.0 程序模块: Test测试 ...

  5. .Net中Remoting通信机制

    Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式. 从微软的产品角度 ...

  6. .NET Remoting 应用实例

    前言 项目中运用到.NET Remoting ,前段时间也看了下.NET Remoting的相关资料,感觉自己应该动手写个实例来梳理下对.NET Remoting认识和理解,不足的地方请大家指正. 简 ...

  7. Holographic Remoting

    看到微软官方的 Holographic Remoting Player https://developer.microsoft.com/en-us/windows/holographic/hologr ...

  8. IIS部署Remoting总结

    1.在IIS里新建一个网站,命名为test,路径指向 e:\test: 2.在 e:\test下创建目录bin: 3.把Remoting远程对象的Project设置为类库,编译为DLL文件,然后复制到 ...

  9. [linux]如何为Virtualbox虚拟硬盘扩容(转载)

    前言 这个教程介绍如何为Virtualbox虚拟硬盘扩容,虚拟硬盘分为动态分配大小和固定虚拟硬盘,扩容的方法不一样: 如何为动态分配的Virtualbox虚拟硬盘扩容 如何为固定大小的Virtualb ...

随机推荐

  1. Xperf Basics: Recording a Trace(转)

    http://randomascii.wordpress.com/2011/08/18/xperf-basics-recording-a-trace/   This post is obsolete ...

  2. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  3. JsRender for object 语法说明

    JsRender 作为一款JavaScript模版引擎,必不可少的会有循环功能,也就是for,但由于JsRender过于灵活,for竟然可以接受object作为循环对象. {{for Array}}和 ...

  4. autocomplete实现联想输入,自动补全

    jQuery.AutoComplete是一个基于jQuery的自动补全插件.借助于jQuery优秀的跨浏览器特性,可以兼容Chrome/IE/Firefox/Opera/Safari等多种浏览器. 特 ...

  5. paip.数组以及集合的操作uapi java php python总结..

    paip.数组以及集合的操作uapi 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...

  6. 实测可用的免费STUN服务器!

    实测可用的免费STUN服务器!     以实际ping延迟排序: stun.voipbuster.com 287ms stun.wirlab.net 320ms s1.taraba.net       ...

  7. sqlserver内存释放心得

    SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少.SQLserver会把所有处理过的SQL操作缓存在内存里,这 ...

  8. Swift入门篇-字符串和字符

    今天主要是介绍一下字符串的用法 ,字符串的语法和object-c语法不太一样,但是思想是一样,就是写法不太一样.如果您对.net和java语法比较熟悉的话,那您几乎没有深压力.如果您对swift 基本 ...

  9. VMware Workstation安装RedHat Linux 9

    RedHatLinux是目前世界上使用最多的Linux操作系统.因为它具备最好的图形界面无论是安装.配置还是使用都十分方便.下面我将介绍使用VMware Workstation安装RedHat Lin ...

  10. drupal7安装中文错误

    安装中文错误 星期四, 07/04/2013 - 15:06 — tao_3000 更多0 An AJAX HTTP error occurred. HTTP Result Code: 200 Deb ...