Remoting压缩信道的编程配置方式
在网上看到(包括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;
客户端:
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压缩信道的编程配置方式相关推荐
- 用Vim编程——配置与技巧
本文介绍如何用强大的文本编辑器 Vim编程.只要配置得当,效果堪比一个IDE. 配置 基本配置: "开启语法高亮 syntax on "依文件类型设置自动缩进 filetype i ...
- 数据库相关概念与编程使用方式
数据库相关概念与编程使用方式 CSDN主页:jcLee95 邮箱:291148484@163.com 1. 数据库基本术语 1.1 数据库(DB) 是一个长期存储在计算机内的.有组织的.可共享的.统一 ...
- Spring Bean配置方式之一:Java配置
简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...
- PicoBlaze 指令存储器配置方式
PicoBlaze 指令存储器配置方式 PicoBlaze微控制器实际上包含两个部分,分别是内核KCPSM3 和指令存储器ROM.为了确保在程序运行期间不会有写入操作,BRAM 的WE 端接地,如图1 ...
- Java编程配置思路详解
Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...
- 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)...
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...
- Java面试官最爱问的垃圾回收机制,Java编程配置思路详解
Java编程配置优点:相对于xml配置而言,其结构更清晰,可读性更高,同时也节省了解析xml耗时. Java编程配置缺点:修改应用配置参数需要重新编译.其实并不是一个大的问题,实际生成环境中,应用配置 ...
- 今日说“法”:FPGA的三种配置方式
今日说"法":FPGA的三种配置方式 欢迎大侠来到FPGA技术江湖新栏目今日说"法",当然,在这里我们肯定不是去研究讨论法律法规知识,那我们讨论什么呢,在这里我 ...
- Altera FPGA 配置方式概述
摘自<<Altera FPGA 勇敢的芯 入门指南>>第12章 Altera FPGA 配置方式概述 FPGA 是基于 RAM 结构的,而 RAM 是易失存储器,在掉电后保 存 ...
最新文章
- std::ref std::cref
- 学python用哪个软件-学python要准备什么软件-问答-阿里云开发者社区-阿里云
- ubuntu17.04下mysql5.7.18源码安装
- drone + gogs 构建CI/CD
- UVA 11401 Triangle Counting(详解)
- SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示...
- 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
- JAVA线程之生产者消费者问题
- java.text.ParseException: Unparseable date:
- android混合编程 pdf,混合编程在A/D转换中的应用.pdf
- quartus之BSF自底向上
- rpc调用过程原理分析以及Dubbo、Feign调用过程
- 因为mac不支持移动硬盘的NTFS格式,mac电脑无法写入移动硬盘的终极解决办法(方便好用)
- 远程访问VM虚拟机方式记录
- 启动tomcat报错:Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhos
- 技术笔记:Indy IdSMTP支持腾讯QQ邮箱邮件发送
- Android 不得不知Tag的妙用
- 人工智能实践作业-修道士和野人过河问题
- [附源码]Python计算机毕业设计高校社团管理系统Django(程序+LW)
- ROS1云课-导航实践测评
热门文章
- Java怎么实现大的map_关于Java中的ConcurrentHashMap的实现原理有大神可以详细介绍下吗?...
- json规范及转义字符
- combobox总结
- VMware网卡配置
- 英特尔中国研究院成立20周年,我看到了这些好玩Demo
- 真正无人驾驶有望在美国全境普及?美交通部准备修改安全法规
- 复杂场景下,如何用AI技术做地图?
- 破解AI大脑黑盒迈出新一步!谷歌现在更懂机器,还开源了研究工具
- AI需要你帮忙 | 把两栖爬行动物框出来,提高AI识别准确率
- 讣告 | ACL终身成就奖得主Aravind Joshi去世