• 上下文
应用程序内的一套规则。例如使用了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. Android开发之对ListView的数据进行排序

    这里涉及到对ListView的数据进行排序,以及ListView的数据如何清空处理.排序的方法相同,但是里面的数据集合有些区别:一种是利用pojo类取得数据:另一种是利用map来取得数据. 第一种:利 ...

  2. visual studio 2017 30天到期,不能输入注册码

    官网下载了visual studio 2017后,第一次安装没有登陆,导致只有30天试用期,虽然还在试用期内,但是无法使用注册码永久使用 解决办法: 1.注册一个微软账号,直接百度搜索“微软账号登陆” ...

  3. Python.tornado.0

    Tornado https://github.com/facebook/tornado http://www.tornadoweb.org/en/stable/guide/intro.html  (A ...

  4. centos7中输入ifconfig出现ens33,没有eth0(转)

    vmware安装的centos7中没有出现eth0网卡,也没有ip,不能上网,输入ifconfig后如下图 解决办法 1.编辑网卡的配置文件 vi /etc/sysconfig/network-scr ...

  5. String、StringBuffer、StringBuilder和StringTokenizer的区别

    1)String.StringBuffer.StringBuilder都用于字符串操作,其中,String是不可变类,即String对象一旦被创建,其值不能被修改,而StringBuffer和Stri ...

  6. Configuration Reference In Vue CLI 3.0

    Configuration Reference This project is sponsored by  #Global CLI Config Some global configurations ...

  7. nginx自旋锁

    #include <stdio.h> #include <stdint.h> #include <unistd.h> /* typedef unsigned lon ...

  8. ListView item中有button或EditText时 点击事件失效问题的解决

    加入:android:descendantFocusability="blocksDescendants" 代码如下: <LinearLayout xmlns:android ...

  9. Office 365 API Tools预览版已提供下载

    Office 365 API Tools预览版地址:http://visualstudiogallery.msdn.microsoft.com/7e947621-ef93-4de7-93d3-d796 ...

  10. 【Linux】CentOS 7.4 安装 MySQL 8.0.12 解压版

    安装环境/工具 1.Linux(CentOS 7.4版) 2.mysql-8.0.12-el7-x86_64.tar.gz 安装步骤 参考:https://dev.mysql.com/doc/refm ...