• 上下文
应用程序内的一套规则。例如使用了begentransaction,就建立了一个规则;再如把synchronization特性应用到某个对象,是多个线程轮流访问这个对象,这也在当前应用产生了一个规则,这些就是上下文。
远程处理,涉及两种上下文,调用代码的上下文和被调用对象的上下文。上下文绑定的只在自己的上下文内起作用,上下文灵活则在调用代码的上下文起作用。默认情况,对象不会被封送,是上下文灵活并不跨应用程序域。当被调用对象被标记成serializable可序列化,或派生自MarshalByRefObject时,在调用代码上下文内操作,即灵活的;当派生自ContextBoundObject,就是绑定的了,不遵循调用代码的上下文。
  • 信道
远程处理,跨进程(不论是一台或不同计算机)调用对象。
信道。是传输机制,用于在跨应用之间的远程处理的边界,移动消息。而且,用户可修改.Net框架提供的这些信道,还可自定义信道。
信道的接口和类。在.Net,信道是实现IChanned接口的对象,接口有两个公共属性,ChannelName,ChannelPriority相对其他信道的优先级。同时.Net提供了实现这个接口的类,一般常用的是HttpChannel和TcpChannel,HttpChannel用SOAP简单对象访问协议格式化消息,用超文本传输协议HTTP传送消息(有一个问题是,当IE使用代理时,需要单独设置);TcpChannel类更灵活,TcpChannel类将消息格式化为二进制流,然后使用TCP协议传送它们,另外需要注意的是,服务器和客户端都要同一个类。
信道包含的接收器。一个信道包含多个接收器,每个接收器负责不同的环节,例如格式化程序接收器,用来把最初的消息,格式化成传输的格式,或反向把传输的格式化成最初的;其他接收器还可以用于登录、加密、筛选。
  • 使用远程处理
服务端监听HTTP信道上,是否有客户端连接,服务端的对象,供客户端远程调用。
服务端的对象,有3种形式,1是Singleeton对象,直接由服务器控制,这类的对象,只能同时有1个实例,所有客户端的调用请求,都由这个实例处理;2是SingelCall对象,也直接由服务器控制,但可创建新实例处理客户端的调用请求,每次调用请求,都新生成实例;3是客户端激活服务器对象,前两种都是服务器激活的,这种服务器对象的生存期由客户端控制(这和本地客户端对象的控制方式一样),并且客户端与这种服务器对象,是持久连接,服务器激活的服务器对象,也叫已知拂去其对象。
具体使用,以第1种服务端对象Singleeton为例。
使用远程处理1,定义服务端接口。
使用服务端接口的好处是,当服务端发生了改变,不用改变客户端,即不用重新编译客户端,编译发生了改变的服务端即可;如果不使用服务端接口,让客户端直接使用服务器对象,当服务器对象发生改变时,需要同时编译客户端,增加部署复杂度。
可在单独的接口文件里public interface ImyWeb
{
    string toupper(string instring);//只定义了一个方法
}
使用远程处理2,生成服务端
public class aclass:Marshalbyrefobjece,ImyWeb//上下文遵循调用代码的,实现了服务端接口
{
    public stirng toupper(string instring)
    {
        return(instring.toupper());
    }
}
class aclasstow 
{
    public static viod main()
    httpChannel hc = new httpchannel(端口号54321):
    ChannelServices.RegisterChannel(hc);//告诉服务器计算机,这个信道开始工作,对应端口的消息,转给这个信道所在的服务端应用。
   Type simpleobjecttype = Type.GetType("simpleobject");
    RemotingConfiguration.RegisterWellKnownServiceType(simpleobjecttype,“soendpoint“,wellkonwnobjecmode.singelton);//告诉服务器计算机,这个服务端程序,可创建singelton类型的对象,并指定了信道端口的名称在这个服务端叫soendpoint,以便其他服务器上的应用共享使用这个信道时,服务器知道是哪个服务端在用。
    console.writeline("  按回车保持服务端”);//表示服务端已经准备完成,先启服务端,,可为创建singelton对象,提供足够时间,以免客户端的调用,没有服务端的响应。
    console.readline();//客户端调用时,服务端读客户端的请求
/*
如果以windows服务的形式生成服务端,就可以从windows控制面板的服务,管理这个服务端,且不需要用户登录服务器计算机,就能使用这个服务端。
*/
}
使用远程处理3,生成客户端。
public viod main()
{
    httpChannel hc = new HttpChannel(0);
    ChannelServices.ResgisterChannel(hc);//告诉客户端计算机,信道开始。
    Object remoteObject = RemotingServices.Connect(typeof(ImyWeb服务端实现服务的接口名),"http://localhost服务端所在计算机的网络地址:服务端使用的端口54321/soendpoint服务端使用这个信道的端口名");
    ImyWeb so = remoteObject as ImyWeb //把收到的对象,转换成接口对象。
    cosole.writeline(so.ToUpper("make this uppercase");//像使用本地接口一样,使用这个得到的远程对象。
}
使用远程处理4,测试代码。
在命令行启动服务端,控制台返回“按回车...”
在另一个命令行启动客户端,控制台返回“MAKE THIS UPPERCASE”

简单地说远程处理过程。这些输出,是通过客户端代码,通过HTTP格式化,通过SOAP传输给服务端,服务端实例化了对象,向客户端返回了代理,客户端调用该服务端对象的方法,接收结果并显示出来。

 

C#-VS远程通信的更多相关文章

  1. 远程通信Socket

    网络通信高性能的三个主题: 1) 传输:用什么样的通道将数据发送给对方,BIO.NIO或者AIO,IO模型在很大程度上决定了框架的性能: 2) 协议:采用什么样的通信协议,HTTP或者内部私有协议.协 ...

  2. golang(gin框架),基于RESTFUL的跨语言远程通信尝试

    golang(gin框架),基于RESTFUL的跨语言远程通信尝试 背景: 在今年的项目实训过程中,遇到了这样的问题: 企业老师讲课实用的技术栈是Java springboot. 实训实际给我们讲课以 ...

  3. 微服务架构 | 12.1 使用 Apache Dubbo 实现远程通信

    目录 前言 1. Dubbo 基础知识 1.1 Dubbo 是什么 1.2 Dubbo 的架构图 1.3 Spring Cloud 与 Dubbo 的区别 1.4 Dubbo 的特点 1.5 Dubb ...

  4. Android 学习笔记 Service服务与远程通信...(AIDL)

    PS:这一章节看的我有几分迷茫,不是很容易理解...不过还好总算是明白了一大半了...基本的迷惑是解决了... 学习内容: 1.跨应用启动服务... 2.跨应用绑定服务... 3.跨应用实现通信... ...

  5. 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成&qu ...

  6. 2-51单片机WIFI学习(开发板测试远程通信详细介绍)

    前一篇链接(最后有APP安装包下载地址) http://www.cnblogs.com/yangfengwu/p/8720148.html 由于自己别的贴片的板子还没到,所以用自己的8266最小系统板 ...

  7. 远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

    总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到 ...

  8. JAVA远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

    RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成&qu ...

  9. 10-51单片机ESP8266学习-AT指令(ESP8266连接路由器,建立TCP服务器,分别和C#TCP客户端和AndroidTCP客户端通信+花生壳远程通信)

    http://www.cnblogs.com/yangfengwu/p/8871464.html 先把源码和资料链接放到这里 源码链接:https://pan.baidu.com/s/1wT8KAOI ...

随机推荐

  1. Class 'com.mchange.v2.c3p0.ComboPooledDataSource' not found [config set

    解决方法: 修改maven <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</arti ...

  2. 使用DirectX作渲染过程

    1. 首先知道渲染代码放置位置.渲染代码放在WinMain消息循环中 while(msg.message!=WM_QUIT) { if(PeekMessage(****) { TranslateMes ...

  3. Linux yum源完全配置

    一.简介 yum主要功能是更方便的添加/删除/更新RPM包,自动解决包的依赖性问题,便于管理大量系统的更新问题,其理念是使用一个中心仓库(repository)管理一部分甚至一个distributio ...

  4. java 字符串截取类 区分中文、英文、数字、标点符号

    package com.founder.fix.ims; /** * @author WANGYUTAO * 操作字符串 */ public class SubString { // public s ...

  5. 758B Blown Garland

    B. Blown Garland time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. XiaoKL学Python(C)__future__

    __future__ in Python 1. from __future__ import xxxx 这是为了在低版本的python中使用可能在某个高版本python中成为语言标准的特性,从而 在将 ...

  7. 探索未知种族之osg类生物---器官初始化三

    当判断到viewer中没有一个graphicContext可用时,osg就会默认的进行一次对viewer的实现操作,这样可以保证osg以后可以安心的在屏幕上进行作画.那我们就来看看这个osgViewe ...

  8. web前端学习笔记:文本属性

    今天的web前端笔记主要讲述文本属性,希望能帮助到正在学习web前端开发的初学者们,废话不多说了,一起来看看文本属性的相关内容吧. 文本属性 文本缩进 将Web页面上的一个段落第一行缩进,这是一种最常 ...

  9. Java中 i++ 是线程安全的么?为什么?

    问题 在 int i = 0; i = i++; 语句中,i = i++是线程安全的么?如果不安全,请说明上面操作在JVM中的执行过程,为什么不安全?说出JDK中哪个类能达到以上的效果,并且是线程安全 ...

  10. Python之路(第二十七篇) 面向对象进阶:内置方法、描述符

    一.__call__ 对象后面加括号,触发执行类下面的__call__方法. 创建对象时,对象 = 类名() :而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()( ...