• 上下文
应用程序内的一套规则。例如使用了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. 一位大牛整理的Python资源

    Python基本安装: * http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站:    * http://www.activestate ...

  2. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  3. 前端面试问题html汇总

    1.对WEB标准以及W3C的理解与认识 结构层 html :表示层  css:行为层:js; 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索机率.使用外链css和js脚本.结构行为表现的分离.文件下 ...

  4. VisualStudio使用技巧

    控制台工程去除黑框 刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口.其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows, ...

  5. How to Disable/Enable IP forwarding in Linux

    This article describes how to Disable or Enable an IP forwarding in Linux. Current IP forwarding sta ...

  6. Spring 如何保证后置处理器的执行顺序 - OrderComparator

    Spring 如何保证后置处理器的执行顺序 - OrderComparator Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.htm ...

  7. Netty 源码 Channel(二)核心类

    Netty 源码 Channel(二)核心类 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一.Channel 类图 二. ...

  8. Python之路番外(第三篇):Pycharm的使用秘籍

    版本:Pycharm2017.3.4Professional Edition 一.Pycharm的基本使用1.在Pycharm下为你的python项目配置python解释器 file --settin ...

  9. Python之路(第一篇):Python简介和基础

    一.开发简介 1.开发:      开发语言:               高级语言:python.JAVA.PHP.C#..ruby.Go-->字节码                低级语言: ...

  10. java 银联接口开发

    http://blog.sina.com.cn/s/blog_6c868c470100ys59.html 在线接口文档:http://wenku.baidu.com/link?url=EUgAuOKz ...