在网上看到(包括MSDN中)关于自定义压缩信道的配置方式都是使用*.config配置文件的方式,可以是我的框架中是自定义的配置文件,编程实现Remoting的配置,要编程配置自定义信道方法如下:

服务端:

                //建立一个端口键值对。名称,端口号。
                IDictionary props = new Hashtable();
                props["name"] = serviceName;
                props["port"] = channelPort;        

                //为使用 压缩接收器 的服务器格式化程序信道接收器提供程序提供实现。
                JCsoft.Common.Remoting.Channels.CompressionServerFormatterSinkProvider serverSinkProvider = new JCsoft.Common.Remoting.Channels.CompressionServerFormatterSinkProvider(compressionLevel);
                
                //注册信道。
                switch(channelType)
                {
                    case ChannelType.TCP:
                    {
                        serverSinkProvider.Next = new System.Runtime.Remoting.Channels.BinaryServerFormatterSinkProvider();
                        ChannelServices.RegisterChannel(new TcpServerChannel(props, serverSinkProvider));
                        break;
                    }
                    case ChannelType.HTTP:
                    {
                        serverSinkProvider.Next = new System.Runtime.Remoting.Channels.SoapServerFormatterSinkProvider();
                        ChannelServices.RegisterChannel(new HttpServerChannel(props, serverSinkProvider));
                        break;
                    }
                }

                //注册服务类型。
                switch(objectMode)
                {
                    case ObjectMode.Singleton:
                    {
                        RemotingConfiguration.RegisterWellKnownServiceType(serviceType, serviceName, WellKnownObjectMode.Singleton);
                        break;
                    }
                    case ObjectMode.SingleCall:
                    {
                        RemotingConfiguration.RegisterWellKnownServiceType(serviceType, serviceName, WellKnownObjectMode.SingleCall);
                        break;
                    }
                }            
                return true;

客户端:

            object service = null;
            string machine = "localhost";
            string connectionString = string.Empty;

            //为使用 压缩接收器 的服务器格式化程序信道接收器提供程序提供实现。
            JCsoft.Common.Remoting.Channels.CompressionClientFormatterSinkProvider clientSinkProvider = new JCsoft.Common.Remoting.Channels.CompressionClientFormatterSinkProvider(compressionLevel);
//            JCsoft.Common.Remoting.Channels.CompressionClientFormatterSink clientSink = new JCsoft.Common.Remoting.Channels.CompressionClientFormatterSink(compressionLevel);
                
            //注册信道。
            switch(channelType)
            {
                case ChannelType.TCP:
                {
                    System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider firstClientSinkProvider = new System.Runtime.Remoting.Channels.BinaryClientFormatterSinkProvider();
                    firstClientSinkProvider.Next = clientSinkProvider;
                    IDictionary props = new Hashtable();
//                    props["name"] = "TcpClientChannel";
                    //props["priority"] = 100;        
                    ChannelServices.RegisterChannel(new TcpClientChannel(props, firstClientSinkProvider));
//                    ChannelServices.RegisterChannel(new BinaryClientFormatterSink(clientSink));
                    break;
                }
                case ChannelType.HTTP:
                {
                    System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider firstClientSinkProvider = new System.Runtime.Remoting.Channels.SoapClientFormatterSinkProvider();
                    firstClientSinkProvider.Next = clientSinkProvider;
                    IDictionary props = new Hashtable();
//                    props["name"] = "HttpClientChannel";
                    //props["priority"] = 100;        
                    ChannelServices.RegisterChannel(new HttpClientChannel(props, firstClientSinkProvider));
//                    ChannelServices.RegisterChannel(new SoapClientFormatterSink(clientSink));
                    break;
                }
            }

            switch(channelType)
            {
                case ChannelType.TCP:
                {
                    connectionString = string.Format("tcp://{0}:{1}/{2}", machine, channelPort, serviceName);
                    break;
                }
                case ChannelType.HTTP:
                {
                    connectionString = string.Format("http://{0}:{1}/{2}", machine, channelPort, serviceName);
                    break;
                }
            }
            try
            {
                service = Activator.GetObject(serviceType, connectionString);
            }
            catch(Exception ex)
            {
                // 处理异常。
                ExceptionManager.Publish(ex);
            }

代码中部分注释掉的是错误的。

如何实现压缩信道可以参见博客园-Zendy的实现一个压缩Remoting传输数据的Sink:CompressionSink 的一篇文件http://www.cnblogs.com/caomao/archive/2005/07/29/202942.aspx,当然也可以自已看MSDN来学习

Remoting压缩信道的编程配置方式相关推荐

  1. 用Vim编程——配置与技巧

    本文介绍如何用强大的文本编辑器 Vim编程.只要配置得当,效果堪比一个IDE. 配置 基本配置: "开启语法高亮 syntax on "依文件类型设置自动缩进 filetype i ...

  2. 数据库相关概念与编程使用方式

    数据库相关概念与编程使用方式 CSDN主页:jcLee95 邮箱:291148484@163.com 1. 数据库基本术语 1.1 数据库(DB) 是一个长期存储在计算机内的.有组织的.可共享的.统一 ...

  3. Spring Bean配置方式之一:Java配置

    简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...

  4. PicoBlaze 指令存储器配置方式

    PicoBlaze 指令存储器配置方式 PicoBlaze微控制器实际上包含两个部分,分别是内核KCPSM3 和指令存储器ROM.为了确保在程序运行期间不会有写入操作,BRAM 的WE 端接地,如图1 ...

  5. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  6. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)...

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  7. Java面试官最爱问的垃圾回收机制,Java编程配置思路详解

    Java编程配置优点:相对于xml配置而言,其结构更清晰,可读性更高,同时也节省了解析xml耗时. Java编程配置缺点:修改应用配置参数需要重新编译.其实并不是一个大的问题,实际生成环境中,应用配置 ...

  8. 今日说“法”:FPGA的三种配置方式

    今日说"法":FPGA的三种配置方式 欢迎大侠来到FPGA技术江湖新栏目今日说"法",当然,在这里我们肯定不是去研究讨论法律法规知识,那我们讨论什么呢,在这里我 ...

  9. Altera FPGA 配置方式概述

    摘自<<Altera FPGA 勇敢的芯 入门指南>>第12章 Altera FPGA 配置方式概述 FPGA 是基于 RAM 结构的,而 RAM 是易失存储器,在掉电后保 存 ...

最新文章

  1. std::ref std::cref
  2. 学python用哪个软件-学python要准备什么软件-问答-阿里云开发者社区-阿里云
  3. ubuntu17.04下mysql5.7.18源码安装
  4. drone + gogs 构建CI/CD
  5. UVA 11401 Triangle Counting(详解)
  6. SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示...
  7. 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
  8. JAVA线程之生产者消费者问题
  9. java.text.ParseException: Unparseable date:
  10. android混合编程 pdf,混合编程在A/D转换中的应用.pdf
  11. quartus之BSF自底向上
  12. rpc调用过程原理分析以及Dubbo、Feign调用过程
  13. 因为mac不支持移动硬盘的NTFS格式,mac电脑无法写入移动硬盘的终极解决办法(方便好用)
  14. 远程访问VM虚拟机方式记录
  15. 启动tomcat报错:Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhos
  16. 技术笔记:Indy IdSMTP支持腾讯QQ邮箱邮件发送
  17. Android 不得不知Tag的妙用
  18. 人工智能实践作业-修道士和野人过河问题
  19. [附源码]Python计算机毕业设计高校社团管理系统Django(程序+LW)
  20. ROS1云课-导航实践测评

热门文章

  1. Java怎么实现大的map_关于Java中的ConcurrentHashMap的实现原理有大神可以详细介绍下吗?...
  2. json规范及转义字符
  3. combobox总结
  4. VMware网卡配置
  5. 英特尔中国研究院成立20周年,我看到了这些好玩Demo
  6. 真正无人驾驶有望在美国全境普及?美交通部准备修改安全法规
  7. 复杂场景下,如何用AI技术做地图?
  8. 破解AI大脑黑盒迈出新一步!谷歌现在更懂机器,还开源了研究工具
  9. AI需要你帮忙 | 把两栖爬行动物框出来,提高AI识别准确率
  10. 讣告 | ACL终身成就奖得主Aravind Joshi去世