• 上下文
应用程序内的一套规则。例如使用了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. C#—Dev XtraTabControl操作总结如动态增加Tab和关闭选项卡方法等

    1:显示行号 找到gridview属性 点击事件 CustomDrawRowIndicator private void gridView1_CustomDrawRowIndicator(object ...

  2. DevExpress中RibbonControl的简单应用

    现在介绍一下DevExpress中的RibbonControl的简单应用,搭建一个拥有Office2010风格的窗体程序. 第一步:打开VS2015,新建一个windows窗体应用程序: 第二步:把需 ...

  3. 1L - ASCII码排序

    输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占一行,有三个字符组成,之间无空格. Output 对于每组输入数据,输出一行,字符中间用一个空格 ...

  4. centos7.2下nginx安装教程

    1.准备工作 1)关闭iptables 关闭操作 iptables -t nat -F 查看操作 iptables -t nat -L 2)关闭selinux 查看操作 setenforce 关闭操作 ...

  5. java8 数据结构的改变(二) 对ConcurrentHashMap影响

    https://www.cnblogs.com/study-everyday/p/6430462.html http://www.importnew.com/22007.html

  6. ASP.NET 在OnClientClick中js方法直接调用Eval绑定字段的数据

    最近有一项目中使用到了asp.net的GridView控件.需要在前端被点击某一行数据时,前端获取到改行后台绑定的数据序列号.遍用<%# Bind("ID) %>.<%# ...

  7. tomcat 启动卡住不动的原因

    启动tomcat , 控制台停在这个地方不动了 [2018-10-10] 11:20:11.551 assets- [RMI TCP Connection(3)-127.0.0.1]-[Default ...

  8. ubuntu下安装maven(转载)

    下载maven http://maven.apache.org/download.cgi 解压 tar -xzvf apache-maven-3.0.5-bin.tar.gz 配置环境变量 sudo ...

  9. Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用

    以某个实际场景为例,现在两张表:用户表User 订单表Order:很显然用户对订单是一对多的关系.二者注解如下 用户表User @Entity @Table(name="users" ...

  10. UDDI

    什么是 UDDI? UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成. UDDI 指的是通用描述.发现与集成服务 UDDI 是一种用于存储有 ...