首页 技术 正文
技术 2022年11月20日
0 收藏 680 点赞 2,721 浏览 2229 个字

简介•.net remoting是.net在RPC分布式应用的技术。首先,客户端通过 remoting访问通道以获得服务端对象,再通过代理解析为客户端对象,通过通道来实现远程对象的调用。原理•远程对象代码可以运行在服务器上,然后客户端再通过 remoting中定义的通道连接服务器,获得该服务对象并通过序列化在客户端运行。•通道即服务端与客户端之间通过IP地址和端口号建立的传输序列化对象的途径。TCP通道•remoting 的通道主要有两种:tcp 和 http。•在.net中,system.runtime.remoting.channel 中定义了 ichannel 接口。ichannel 接口包括了 tcpchannel 通道类型和 http 通道类型。它们分别对应 remoting 通道的这两种类型。•tcpchannel 类型    tcp通道提供了基于 socket 的传输工具, 使用tcp协议   来传输序列化的消息流。 tcpchannel类型默认使用二进制格式序列化消息对象,因此它具有更高的传输性能。激活可序列化的对象•在访问远程类型的一个对象实例之前,必须通过一个名为 activation 的进程创建它并进行初始化。这种客户端    通过通道来创建远程对象,称为对象的激活。•在 remoting中,远程对象的激活分为两大类:    服务器端激活和客户端激活。•.net remoting 把服务器端激活又分为 singleton 模式和singlecall 模式两种。•singlecall 是一种无状态模式。一旦设置为singlecall 模式,则当客户端调用远程对象的方法时,remoting 会为每一个客户端建立一个远程对象实例。•singleton 模式:此为有状态模式。如果设置为 singleton 激活方式,则 remoting 将为所有客户端建立同一个对象实例。当对象处于活动状态时,singleton 实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。singleton 实例将在方法调用中一直维持其状态。•由于 remoting 传递的对象是以引用的方式,因此所传递的远程对象类必须继承marshalbyrefobject。•因此,有了可以传输的对象,有了传输的通道,那么客户端就可以利用通道调用服务端的对象了。 Remoting是一个分布式处理服务。服务器端首先创建通道,并自动开启监听通道。根据客户端发出的请求,传递远程对象。因此,编写Remoting程序,主要分为三部分:
1、被传递的远程对象;
2、服务器端监听程序;
3、客户端请求和处理对象程序;简单学会.net remoting 简单学会.net remoting

第一步:先定义可序列化的远程对象。
须继承MarshalByRefObject对象,
是通过使用代理交换消息来跨越应用程序域边界进行通信的对象的基类。 namespace RemotingModal{    public class RemotingModal:MarshalByRefObject    {          //远程对象          public void GetMessage(string word)          {               System.Console.WriteLine(word);          }     }} 第二步:服务器端:是一个控制台,首先要添加对System.Runtime.Remoting的引用,然后添加对RemotingModal的引用 。 1、定义服务端监听端口。 2、注册通道。3、定义激活方式激活远程对象。

static void Main(string[] args)
{
//注册通道
TcpServerChannel Channel = new TcpServerChannel(9200);
ChannelServices.RegisterChannel(Channel, false);
Console.WriteLine(“服务已启动,请不要关闭服务!”);

//注册远程对象
RemotingConfiguration.RegisterWellKnownServiceType(typeof(CaseInfoModal.CaseInfoModal), “CaseInfoModal.rem”, WellKnownObjectMode.Singleton);
Console.ReadLine();
}

 第三步:客户端:1、注册TCP通道
2、激活远程服务对象
3、获得远程对象的方法 private void button1_Click(Object sender,EventArgs e){    try{ 

string serverPath = ConfigurationManager.AppSettings[“ServerPath”];
string url = “tcp://” + serverPath.Trim() + @”/RemotingModal.rem”;
_server = (RemotingModal.RemotingModal)Activator.GetObject(typeof(RemotingModal.RemotingModal), url);

_server.GetMessage(“传入值”);

textBox1.Text=”输出值”;

    }    catch(Exception e){     MessageBox.Show(ex.Message);    }}

     

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,034
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,520
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,368
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,148
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,781
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,862