• C#-VS远程通信


    • 上下文
    应用程序内的一套规则。例如使用了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传输给服务端,服务端实例化了对象,向客户端返回了代理,客户端调用该服务端对象的方法,接收结果并显示出来。
     
  • 相关阅读:
    WCF基础 (续 更多关于配置文件的内容)
    WCF基础 (续 暴露元数据交换节点)
    简单的asp.net文件上传类
    根据年份月份,获得此月份的所有日期[转]
    JS 设为首页/加入收藏
    WCF基础 (续 使用代码生成WCF服务)
    WPF自定义标题栏——窗口移动和按钮状态转换[转]
    WCF元数据交换
    WCF基础 (续 为一个ASMX服务实现一个WCF客户端) 完结
    WCF基础 (续 通过代码和配置文件写一个WCF服务)
  • 原文地址:https://www.cnblogs.com/yinlg/p/4904760.html
Copyright © 2020-2023  润新知