Remoting接口测试工具

动手写一个Remoting接口测试工具

基于.NET开发分布式系统,经常用到Remoting技术。在测试驱动开发流行的今天,如果针对分布式系统中的每个Remoting接口的每个方法都要写详细的测试脚本,无疑非常浪费时间。所以,我想写一个能自动测试remoting接口的小工具InterfaceTester。而且,当分布式系统中的某个remoting接口出现bug时,该小工具可以提交需要模拟的数据,以便在调试remoting服务的环境中,快速定位和解决bug。

  InterfaceTester运行起来后的效果如下图:

Remoting接口测试工具

1.如何使用

(1)首先,填上要测试的并且是已经发布的Remoting服务的地址信息。

(2)选取要测试的remoting接口所在的程序集,一般是一个dll。选定程序集后,InterfaceTester会自动搜索该程序集中定义的所有接口,并将其绑定到“接口类型”的下拉列表。

(3)从 “接口类型”的下拉列表中选择要测试的接口。选定接口后,InterfaceTester会自动搜索该接口中定义的所有方法,并将其绑定到“目标方法”的下拉列表。

(4)从 “目标方法”的下拉列表中选择要测试的方法,InterfaceTester会根据该方法所要求的参数,自动生成参数录入界面。

(5)在参数录入界面上,输入用于测试的参数的值,然后,点击“调用”按钮, InterfaceTester便会调用上述指定地址的remtoing服务的指定接口的指定方法,如果调用的方法有返回值,则会在“调用返回”的panel上显示该值。如果返回的不是一个简单类型,而是一个对象,则“调用返回”的panel上将会以xml的形式显示这个对象的各个属性值。

2.实现原理

就这个小工具的实现而言,主要用到的技术就是反射(reflection)。另外,需要注意的就是,根据参数的类型,生成录入界面。具体细节大家可以参见源码。目前,InterfaceTester支持的被测试方法的参数类型是有限制的:

(1)支持简单的数据类型,像string、int、bool等。

(2)支持List<>、I List<>、IDictionary<,>、Dictionary<,>等集合类型。

(3)支持简单的数据结构的class(如像Point、自定义的Entity等)。

3.源码解决方案

  下载源码并用VS打开后,解决方案下有三个项目:InterfaceTester、DemoInterface、DemoService。

(1)InterfaceTester项目是我们本文的主角:用于remoting接口测试的小工具。

(2)DemoInterface和 DemoService则是为了试试小工具而构建的一个小demo。 DemoInterface定义了发布的remoting服务的接口, DemoService则是发布的remoting服务。

在试用时,先启动 DemoService项目,再启动InterfaceTester,就可以试试我们的小工具功能了。

4.源码下载

  InterfaceTester

  针对这个remoting接口测试小工具,大家如果有什么好的建议,请留言告诉我:)

C#专栏

各种C#或.NET技术问题讨论

动手写一个Remoting接口测试工具
摘要: 基于.NET开发分布式系统,经常用到Remoting技术。在测试驱动开发流行的今天,如果针对分布式系统中的每个Remoting接口的每个方法都要写详细的测试脚本,无疑非常浪费时间。所以,我写了一个能自动测试remoting接口的小工具InterfaceTester,跟大家分享。阅读全文

posted @ 2014-05-14 11:17 zhuweisky 阅读(437) | 评论 (1) 编辑

让OMCS支持更多的视频采集设备
摘要: 有些OMCS用户在他的系统使用了特殊的视频采集卡作为视频源(如AV-878采集卡),虽然这些采集卡可以虚拟为一个摄像头,但有些视频采集卡需要依赖于自带了sdk才能正常地完成视频采集工作。在这种情况下,OMCS是不直接支持这些采集卡的。我们的思路是使OMCS具有自定义扩展的能力:我们让OMCS提供了扩展接口,让使用者可以向OMCS框架中注入其自己的视频采集程序。阅读全文

posted @ 2014-04-08 09:30 zhuweisky 阅读(102) | 评论 (0) 编辑

C#实现录制屏幕
摘要: 以前写过两篇录制麦克风语音和摄像头视频的文章,最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?阅读全文

posted @ 2014-03-11 15:31 zhuweisky 阅读(1821) | 评论 (27) 编辑

在服务器端录制语音视频
摘要: 有个朋友的需求是这样的:他开发了一个在线培训系统,需要在服务端将指定老师的讲课内容录制下来,并保存为.mp4文件。类似这样的需求该如何实现了?阅读全文

posted @ 2014-01-10 09:42 zhuweisky 阅读(1046) | 评论 (3) 编辑

移植到Windows CE 的经验
摘要: 本文记录了在将通信引擎移植到WinCE平台时,遇到的一些问题和解决方案,对于那些初次接触WinCE开发的.NET程序员或许有些许帮助。阅读全文

posted @ 2013-12-28 10:02 zhuweisky 阅读(684) | 评论 (6) 编辑

通信服务器群集、跨服务器通信Demo(源码)
摘要: 假设,我们一台TCP应用服务器能同时承载一万人同时在线,而同时在线数通常为5万多,那我们就需要部署6台服务器来分担这些负载。再假设,任意的两个客户端都有可能需要互发消息(比如,传送文件),那问题就来了 -- 因为要互发消息的这两个客户端连接的可能是不同的服务器。如何解决这个问题了?阅读全文

posted @ 2013-10-15 11:24 zhuweisky 阅读(1689) | 评论 (7) 编辑

为程序集添加强签名
摘要: 给程序集强签名的常见一个作用,就是相当于给程序集印上了一个“****出品”的标志,这样别人就知道,这个程序集是你(或你的公司)发布的,别人就无法假冒你的名义了。一.给程序集强签名 要给程序集强签名,很简单,VS自带了这一功能。 首先,在解决方案资源管理器中选中目标项目,右键->属性,切换到“签名”页: 第一次给程序集签名,先要新建密钥文件: 可以为密钥文件取个名称,然后输入保护密码,点击确定后,会在项目目录下生成一个“sky.pfx”文件。 选中刚生产的密钥文件“sky.pfx”,重新编译项目,得到的程序集,就是经过强签名的了。 特别说明:(1)“sky.pfx”就相当于是你...阅读全文

posted @ 2013-09-24 11:49 zhuweisky 阅读(43) | 评论 (0) 编辑

客户端服务器通信demo(续) -- 使用二进制协议 (附源码)
摘要: 二进制协议,通常是由消息头(Header)和消息体(Body)构成的,消息头的长度固定,而且,通过解析消息头,可以知道消息体的长度。本文我们将构建一个客户端与服务器之间使用二进制消息进行通信的Demo。通过本文,你将更直观地了解基于二进制消息的通信系统内部的消息运作的具体流程。阅读全文

posted @ 2013-09-05 15:22 zhuweisky 阅读(1514) | 评论 (6) 编辑

分贝显示器,实时显示声音强度(附源码)
摘要: 如何得到音频数据(PCM)的分贝值?麦克风采集到的声音的强度是多大?如何直观的显示在UI上?阅读全文

posted @ 2013-08-25 19:46 zhuweisky 阅读(1502) | 评论 (2) 编辑

摄像头、麦克风、扬声器测试程序(附源码)
摘要: 在开发类似语音视频聊天或视频会议这样的系统时,它们通常都包含一个测试音视频设备的功能,就像QQ的语音测试向导和视频设置向导一样,这是如何实现的了?阅读全文

posted @ 2013-08-20 09:01 zhuweisky 阅读(1827) | 评论 (7) 编辑

客户端服务器通信demo(附源码)
摘要: 如何快速的实现客户端与服务器之间简单、高效、稳定的通信?阅读全文

posted @ 2013-06-17 10:29 zhuweisky 阅读(3337) | 评论 (10) 编辑

泛型KMP算法
摘要: 原始的KMP算法适用的对象是字符串的匹配搜索,其实针对任意类型的串(实际上就是一个数组)的子串搜索,都可以使用KMP算法。阅读全文

posted @ 2013-06-06 10:06 zhuweisky 阅读(1309) | 评论 (4) 编辑

广播与P2P通道(下) -- 方案实现
摘要: 在上篇文章中,我们已经找到了最优的模型,即将广播与P2P通道相结合的方案,这样能使服务器的带宽消耗降到最低,最大节省服务器的宽带支出。本文我们将实现这个最优模型。阅读全文

posted @ 2013-04-27 09:35 zhuweisky 阅读(1671) | 评论 (2) 编辑

广播与P2P通道(上) -- 问题与方案
摘要: 当客户端需要广播一个消息给同一个组中的其它客户端时,是经过服务器中转?还是经P2P通道传送?服务器带宽的占用如何?最优的方案是什么?阅读全文

posted @ 2013-04-25 20:19 zhuweisky 阅读(1310) | 评论 (3) 编辑

调用非托管dll常出现的bug及解决办法
摘要: C和C++有很多好的类库的沉淀,在.NET中,完全抛弃它们而重头再来是非常不明智的、也是不现实的,所以,我们经常需要通过Pinvoke来使用以前遗留下来的非托管的dll。就.NET中使用非托管的dll经验而言,经常碰到的问题至少有两个,它们都是通过在运行时抛出异常来体现的。阅读全文

posted @ 2013-01-09 10:45 zhuweisky 阅读(1430) | 评论 (2) 编辑

实现语音视频录制(demo源码)
摘要: 最近正在做的一个网络招聘平台的项目,其中有一个模块是这样的,应聘者可以通过该系统的客户端录制自己的视频(自我介绍)上传到服务器,而后,招聘者会在合适的时候浏览这些应聘者的视频。该模块涉及到的主要技术就是语音视频录制技术。阅读全文

posted @ 2012-12-21 10:14 zhuweisky 阅读(2932) | 评论 (17) 编辑

P2P直连?经服务器中转?
摘要: 当同一个系统的两个客户端A、B相互发送消息给对方时,如果它们之间存在P2P通道,那么消息传送的路径就有两种:直接经P2P通道传送、或者经服务器中转。那么,对于这两条通道,我们该如何选择了?阅读全文

posted @ 2012-12-06 11:21 zhuweisky 阅读(2242) | 评论 (1) 编辑

实现简单的手写涂鸦板(demo源码)
摘要: 在一些软件系统中,需要用到手写涂鸦的功能,然后可以将涂鸦的结果保存为图片,并可以将“真迹”通过网络发送给对方。如何实现这种涂鸦功能了?阅读全文

posted @ 2012-10-31 15:01 zhuweisky 阅读(2307) | 评论 (4) 编辑

实现类似QQ自拍头像的功能(demo源码)
摘要: 在很多软件系统中,都允许用户设置自己的头像,甚至可以直接使用摄像头照相作为自己的头像,就像QQ的自拍头像功能一样。这种功能是如何实现的了?阅读全文

posted @ 2012-10-26 20:44 zhuweisky 阅读(2776) | 评论 (13) 编辑

在Web中如何使用Windows控件?
摘要: 最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,ActiveX。阅读全文

posted @ 2012-09-14 10:11 zhuweisky 阅读(2845) | 评论 (17) 编辑

如何实现离线文件?
摘要: 所谓“离线文件”,就是当接收者不在线时,发送者先把文件传送给服务端,在服务器上暂时保存,等接收者上线时,服务端再把文件发送给他。本文简洁地描述了实现离线文件功能的主要思路和基本模型。阅读全文

posted @ 2012-09-13 13:49 zhuweisky 阅读(2727) | 评论 (3) 编辑

让你的Socket应用兼容IPv6
摘要: 随着互联网越来越普及,以及物联网的兴起,IPv4地址已远远不够用,IPv6的普及将是不可避免的趋势。以前,我们的大部分socket程序几乎都是针对IPv4而开发,如果不做升级重构,那么使用IPv6地址的客户端将无法使用服务端提供的服务。阅读全文

posted @ 2012-07-18 16:09 zhuweisky 阅读(3764) | 评论 (2) 编辑

AutoResetEvent 的诡异行为
摘要: AutoResetEvent的WaitOne方法可能导致进程意外退出,你遇到过吗?阅读全文

posted @ 2012-06-13 11:56 zhuweisky 阅读(2214) | 评论 (4) 编辑

“配置系统未能初始化” 异常解决
摘要: 当我们把基于.NET 2.0开发的网络客户端程序部署到windows 7 家庭普通版上启动时,报出了“配置系统未能初始化”的异常,在另外一些windows 7 家庭普通版的机器上则报出“应用程序无法启动,因为应用程序的并行配置不正确 ”的异常。阅读全文

posted @ 2012-02-15 16:31 zhuweisky 阅读(7762) | 评论 (8) 编辑

奇异的Pinvoke调用
摘要: 我们的一个C#项目需要调用C++的dll,通过Pinvoke进行方法调用。其中的一个方法及其参数的定义是这样的: [StructLayoutAttribute(LayoutKind.Sequential)] publicstructxvid_gbl_info_t{ ///intpublicintversion;///intpublicintactual_version;///char*[MarshalAsAttribute(UnmanagedType.LPStr)]publicstringbuild;///unsignedintpublicuintcpu_flags;///intpublici阅读全文

posted @ 2011-07-07 09:07 zhuweisky 阅读(873) | 评论 (3) 编辑

铁血规则:事件预订与取消预订
摘要: 在编码的时候,我们经常预订某个事件来处理它,但很少取消事件的预订,这种做法可能导致程序在运行时出现一些异常。 如果你的某个用于处理事件的对象不是在运行期内永久存在的(比如,不是Singleton对象),那么请记住一条规则:在该对象(事件预订者)的生命周期中只要预订了其他对象(事件发布者)的事件,那么在该对象释放时,一定要取消这些事件的预订。否则,在预订者被释放后,发布者仍然保持着预订者的引用,在对应的事件被触发时,发布者仍然会持有预订者的引用(导致内存泄露),并且调用预订者的处理函数,而由于预订者已经被释放,所以可能引发莫名其妙的问题。(这条规则很早就总结出来了,最近却忘记了,以至于浪费了半.阅读全文

posted @ 2011-04-07 17:19 zhuweisky 阅读(1837) | 评论 (5) 编辑

应用Composite模式
摘要: 在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中我们介绍的ESFramework提供的消息处理的骨架流程,假设我们有这样的需求,我们需要在网关级消息监控器处放置两个监控器,一个用于对收到的消息进行特殊的验证,另一个用于检查重复的消息。咋一看,可能觉得骨架流程做不到这一点,因为它只为网关级监控器预留了一个位置,没有办法将两个网关级监控器挂接到这一个位置上。 ESFramework通过Composite模式解决了这个问题。Composite模式允许将实现了同一接口的多个组件放在一个容器中,而这个容器也实现了相同的接口。如此,我们可以使用这个容器组件来挂接到只接受.阅读全文

posted @ 2011-03-22 11:03 zhuweisky 阅读(1544) | 评论 (2) 编辑

Win7下的DragDrop事件不触发?
摘要: Win7与原来的XP和Win2003相比,安全控制方面更严格。比如,当我们以administrator登陆XP或Win2003时,运行所有的程序即是以管理员的身份启动的。但当以administrator登陆Win7时,通常状态下,运行普通程序是以普通用户的身份启动的。当我们的WinForm应用程序需要以管理员的身份运行时(比如,为了访问windows注册表),我们需要在程序清单(app.manifest文件)中将UAC选项改为"requireAdministrator"(可以参考如何自动以管理员身份运行.NET程序?)。如此生成的exe的图标在XP和Win2003下是没有变化的,但是放到win阅读全文

posted @ 2011-01-22 11:04 zhuweisky 阅读(2366) | 评论 (7) 编辑

在.NET中使用Speex -- 音频数据编解码
摘要: Speex是一套开源的音频编解码库,最新版本还包含了回音消除和防抖动等功能,如果我们想开发语音聊天或视频会议这样的系统,Speex将是一个不错的选择。到http://www.speex.org可以下载Speex的源码(编译后的dll为libspeex.dll),最新版本为1.2。不过源码是用C+...阅读全文

posted @ 2010-09-16 10:57 zhuweisky 阅读(4400) | 评论 (50) 编辑

如何自动以管理员身份运行.NET程序?
摘要: windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等。否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛出异常。  如何让程序在启动时,自动要求“管理员”权限了,我们只需要修改app.manifest文件中的配置项即可。  app.manifest文件默认...阅读全文

posted @ 2010-08-27 11:44 zhuweisky 阅读(4474) | 评论 (13) 编辑

Form或UserControl接收不到KeyDown等事件?
摘要: 当Form包含自定义控件,或UserControl存在嵌套时,外层的对象就会接收不到KeyDown等事件了,但是,我们可以通过override基类的ProcessDialogKey方法来达到同样的效果,比如:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-...阅读全文

posted @ 2010-07-10 15:00 zhuweisky 阅读(877) | 评论 (0) 编辑

关于重复绑定TCP端口的疑惑?
摘要: 如果我使用TcpListener绑定本地的7000端口,并启动监听。然后,再使用TcpClient绑定本地7000端口,此时需要开启TcpClient的地址重用设置:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->TcpClient.Client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true); 如果使用该TcpClient向其它的服务器阅读全文

posted @ 2010-05-26 11:42 zhuweisky 阅读(1179) | 评论 (3) 编辑

.NET做的画图板,试用一下!
摘要: 画图板控件是一个类似windows自带的画图程序的WinForm控件,基于GDI+技术构建。使用该控件,我们可以快速地实现类似手写板、网络电子白板等功能。1.支持的形状(1)线段、箭头线、双箭头线(2)水平肘型连接符、垂直肘型连接符(3)矩形、三角形、椭圆(圆)(4)文本(5)*曲线(6)插入位图画图板控件内部采用了类似插件的实现方式,可以根据需要方便地增加新的形状。2.功能(1)水平对齐、垂直对齐(2)复制对象(3)拖拉以改变形状、修改对象属性(线条粗细、颜色、填充色、字体、虚实线)(4)层叠设置(5)缩放(6)激光笔(7)打印预览、打印 (横向、纵向)(8)保存为位图(9)一个项目中可.阅读全文

posted @ 2010-04-30 09:31 zhuweisky 阅读(1375) | 评论 (6) 编辑

在应用程序之间传递动态程序集
摘要: 所谓动态程序集,就是在运行期间由Emit创建的程序集。假设,我们的Client和Server之间通过Remoting通信,在某个时刻,Client会创建一个动态程序集,并且Client和Server都会基于该程序集做一些逻辑操作,那么Client如何将动态程序集传递到Server端了?Client和Server又如何做才能正常使用这个程序集了? 阅读全文

posted @ 2009-08-13 10:14 zhuweisky 阅读(3166) | 评论 (10) 编辑

关于【对象“***.rem”已经断开连接或不在服务器上】异常的解决方法
摘要: 假设,Remoting服务端接受并保存了一个Remoting客户端注册的回调接口(比如ICallback),在一定的时刻,服务端会通过ICallback接口调用客户端的某些方法。当运行一段时间后,服务端再次回调ICallback时,就抛出了类似下面的异常:对象“/9ca38d87_7f53_49b7_8c81_f2d499239f27/jqgpmhyy_rwcmicplf3j8s0j_...阅读全文

posted @ 2009-08-11 11:39 zhuweisky 阅读(1229) | 评论 (2) 编辑

DCFramework 动态分布式计算框架(01)-- 基础结构
摘要: DCFramework的基础结构介绍,提供 DCFramework Demo源码下载。阅读全文

posted @ 2009-05-28 18:05 zhuweisky 阅读(2549) | 评论 (7) 编辑

DCFramework 动态分布式计算框架(00) -- 序
摘要: 分布式计算最基本的目的之一就是为了充分利用空闲的计算节点的计算能力。通常,我们首先会将要被分布式计算的程序在每个计算节点部署好,然后才可以调用分布式计算。这种“部署”是一种静态的。之所以称为静态的,是因为还有一种更动态更灵活的方式 -- 我们可以随时的、动态的将我们新完成的程序自动【提交】到已经部署好的分布式框架里动态运行起来。阅读全文

posted @ 2009-05-28 09:29 zhuweisky 阅读(3180) | 评论 (14) 编辑

TopN算法与排行榜
摘要: 在系统中,我们经常会遇到这样的需求:将大量(比如几十万、甚至上百万)的对象进行排序,然后只需要取出最Top的前N名作为排行榜的数据,这即是一个TopN算法。阅读全文

posted @ 2009-05-23 11:10 zhuweisky 阅读(4330) | 评论 (14) 编辑

如何突破.NET内存限制?

posted @ 2009-01-05 10:56 zhuweisky 阅读(3392) | 评论 (15) 编辑

Spring.net 的一个bug ?
摘要: Spring.net的IOC容器中的某个对象还未被正确设置其属性就被其它依赖对象使用了,以至于依赖对象获取了错误的数据。阅读全文

posted @ 2008-12-08 11:48 zhuweisky 阅读(2077) | 评论 (1) 编辑

锁定与并发
摘要: 在多线程程序中,我们经常需要对要访问的资源进行加锁。加锁的目的是为了同步对资源的访问,但是,加锁不可避免的会降低应用的并发量。那么如何在需要加锁的时候,尽可能地提高并发量了?阅读全文

posted @ 2008-11-26 09:42 zhuweisky 阅读(2646) | 评论 (5) 编辑

A*算法的C#实现
摘要: A*算法是如今游戏所采用的寻路算法中相当常用的一种算法,它可以保证在任何起点和任何终点之间找到最佳的路径(如果存在的话),而且,A*算法相当有效。阅读全文

posted @ 2008-10-22 16:31 zhuweisky 阅读(6942) | 评论 (27) 编辑

Remoting插件与网关设置
摘要: 今天解决一个部署问题,问题是这样的:我们的平台和GameServer部署在IDC的同一局网中,平台一块网卡配置了2个IP地址。GameServer通过Remoting访问平台正常,平台通过Remoting回调GameServer也成功,但是GameServer通过Remoting访问平台的动态插件服务时,却抛出Socket异常。经过检查和尝试,最后发现原来是平台的网关没有配置导致的,网关配置后,G...阅读全文

posted @ 2008-06-18 11:09 zhuweisky 阅读(720) | 评论 (0) 编辑

Spring.net -- 目前不支持getter、setter的访问限定符
摘要: 如果你使用Spring.net作为你的IOC容器,那么一定要注意这个问题--Spring.net 目前不支持getter、setter的访问限定符。 
阅读全文

posted @ 2008-05-29 18:39 zhuweisky 阅读(1949) | 评论 (3) 编辑

你知道 typeof(void) 吗?

posted @ 2008-05-21 10:31 zhuweisky 阅读(4168) | 评论 (18) 编辑

.NET Remoting与双网卡
摘要: 今日将Remoting服务端搬到一台双网卡的服务器上启动,结果客户端无法Remoting连接到服务器,经过探索,发现Remoting服务绑定到了内网网卡的地址,解决办法很简单,只需要在Channel配置项中将useIpAddress属性设置为false,如:<channels><channelref="tcp"port="9000"useIpAddress="false">...阅读全文

posted @ 2007-09-21 23:34 zhuweisky 阅读(1732) | 评论 (5) 编辑

TCP连接与防火墙
摘要: 通常,我们的Tcp服务器会放在IDC机房的某一个或几个防火墙后面,客户端与服务器之间的TCP连接会经过防火墙中转,如下图所示: 在这种情况下,有一点特别需要注意:当Firewall与Server之间的Tcp连接在一段时间(如10分钟)内没有任何应用层的消息经过时,Firewall可能会主动断开与Server之间的Tcp连接,但是Client与Firewall之间的连接一直是有效的。这种情况下,Se...阅读全文

posted @ 2007-09-16 14:58 zhuweisky 阅读(1543) | 评论 (1) 编辑

【C#2.0】发挥匿名委托的威力!
摘要: 灵活地运用匿名委托,可以极大地精简我们操作集合的代码!阅读全文

posted @ 2007-08-04 20:14 zhuweisky 阅读(6668) | 评论 (10) 编辑

Socket与拔掉网线
摘要: 当客户端与服务端通过Tcp Socket进行通信时,如果客户端应用正常退出或异常退出,服务端都会在对应的连接上获取感知(如返回0、或抛出异常)。但是,如果客户端的网线被拔掉,那么,默认情况下,服务端需要在2个小时后才会感知客户端掉线。对于很多服务端应用程序来说,这么长的反应时间是不能忍受的。我们通常在应用层使用“心跳机制”来解决类似的问题,这是可行的。然而,在这里,我们可以...阅读全文

posted @ 2007-05-28 17:10 zhuweisky 阅读(4418) | 评论 (4) 编辑

通过Spring.net发布Remoting
摘要: Spring.Services程序集中提供了对Remoting的支持,使用Spring.net可以方便的发布和使用Remoting服务。1.Remoting发布(服务端)(1)首先在config文件中注册通道:<system.runtime.remoting><application><channels><channelref="tcp"port="810...阅读全文

posted @ 2007-05-26 11:26 zhuweisky 阅读(3963) | 评论 (7) 编辑

注解:System.Threading.Timer

posted @ 2007-03-16 13:46 zhuweisky 阅读(4990) | 评论 (5) 编辑

自动化 object <-> xml
摘要: SpringFox 用于将object 与 xml字符串相互转换。XML大纲遵循Spring.net的object配置大纲。 
阅读全文

posted @ 2007-03-02 08:52 zhuweisky 阅读(2854) | 评论 (5) 编辑

使用Null Object设计模式
摘要: 灵活地使用Null Object设计模式,可以使得我们的代码更加简洁和精炼。 
阅读全文

posted @ 2007-02-28 19:34 zhuweisky 阅读(5757) | 评论 (15) 编辑

MSMQ与Hashtable
摘要: 今天在使用.NET操作消息队列时,碰到一个小问题,如果采用XmlMessageFormatter序列化消息体,则消息体中不能包含Hashtable等字段,否则将无法完成序列化和反序列化(即使消息体对象加上了Serializable特性也不行)。经过研究发现,XmlMessageFormatter不会采用我们经常用于.NET Remoting序列化的二进制或Soap格式,而是使用Xml格式,所以Se...阅读全文

posted @ 2006-11-16 12:31 zhuweisky 阅读(2376) | 评论 (3) 编辑

基于MSMQ使用WCF
摘要: 在windows平台上,MSMQ是首选的消息传递中间件,它是一种高速、异步、可靠的通信机制,当我们在Internet上的两个应用需要交换信息时,使用这样的中间件可能是必须的。WCF完全面向SOA,大大简化了以往风格迥异的多种分布式解决方案。刚好,最近的一个项目需要使用SOA架构,而底层需要使用MSMQ作为消息传递基础设施,所以这两天研究了一下,在WCF中使用MSMQ的方法。下面以一个例子说明。首先...阅读全文

posted @ 2006-11-09 11:56 zhuweisky 阅读(6736) | 评论 (12) 编辑

Java -- 在Eclipse上使用Spring
摘要: 在.NET上用的VS.NET+Spring.net+Nhibernate,到了Java平台上,自然对应着Eclipse+Spring+Hibernate。上一篇文章介绍了如何在Eclipse上使用Hibernate的入门,本文就简单介绍一下如何在Eclipse使用Spring。(1)首先,是下载Spring,可以从sourceforge上下载,http://sourceforge.net/projects/springframework。目前的最新的可以下载 spring-framework-1.2.8-with-dependencies.zip 。 (2)然后,可以将Spring引入到你的.阅读全文

posted @ 2006-05-30 19:48 zhuweisky 阅读(5751) | 评论 (2) 编辑

Java -- 在Eclipse上使用Hibernate
摘要: 最近一个项目要用Java做,一点都不熟啊。没办法,只好硬着头皮啃了,花了大半天的时间,终于在Eclipse上完成了第一个Hibernate例子。下面记录关键的步骤,权作笔记,以备日后查看。(1)下载Hibernate,并向项目中导入Hibernate。Project->Properies->Java Build Path->Libraries->Add External JARs...,选择Hibernate根目录下的hibernate3.jar,添加到项目中。接着,要将Hibernate下的lib文件夹下的所有文件都作为一个User Library添加到项目中,否则,阅读全文

posted @ 2006-05-30 15:08 zhuweisky 阅读(15873) | 评论 (12) 编辑

NHibernate 与Oracle 点滴
摘要: 以下是我在使用NHibernate过程中遇到的一些小问题,记录下来,权当笔记吧!1.自增序列与严格类型匹配 在使用Oracle数据库的自增主键时,hbm.xml配置文件中generator class可设为"increment",也可设为"sequence",最好使用"increment",使用"sequence"有时在插入obj时会抛出“ORA-02289: 序列(号)不存在”异常! 另外,在load object时,传入的ID的类型要与数据库的严格一致。比如如下自增主键: <idname="Id阅读全文

posted @ 2006-05-19 10:45 zhuweisky 阅读(3226) | 评论 (5) 编辑

撤销与反撤销 功能实现

posted @ 2006-04-30 09:49 zhuweisky 阅读(4275) | 评论 (11) 编辑

初试Ajax.Net !

posted @ 2006-04-19 10:08 zhuweisky 阅读(4608) | 评论 (14) 编辑

将权限引入系统的探索

posted @ 2006-04-08 22:39 zhuweisky 阅读(2481) | 评论 (5) 编辑

【Spring.net点滴】

posted @ 2006-03-29 10:17 zhuweisky 阅读(2387) | 评论 (5) 编辑

VS小插件--属性自动生成器
摘要: 对于“依赖注入”,我最常用的是“设值注入法”(即通过Setter属性注入),对于需要注入很多依赖的类来说,一个一个的手动写属性的繁琐已经让我难以忍受了。于是我写了一个VS2003的小插件,你只需要输入类型和属性名,它就能在编辑器指定的地方自动生成属性,并且一次可生成多个属性。(我试用了VS2005下的属性自动生成功能,感觉也不是那么好用:)) 这个小插件安装后,会在VS2003的右键快捷菜单的顶部出现一个菜单项“PropertyCreatorAddin”: 点击该菜单,会出现如下窗口:比如你在“属性字符串”的TextBox中输入字符串“ int ConnectionCount ,string.阅读全文

posted @ 2006-03-24 16:01 zhuweisky 阅读(3267) | 评论 (17) 编辑

ZipHelper 修正

posted @ 2006-03-09 11:49 zhuweisky 阅读(936) | 评论 (2) 编辑

压缩与解压缩 ZipHelper

posted @ 2006-03-06 09:40 zhuweisky 阅读(3014) | 评论 (11) 编辑

C#播放rm文件

posted @ 2006-02-15 11:14 zhuweisky 阅读(5018) | 评论 (14) 编辑

插件的“动态替换”

posted @ 2005-12-30 15:26 zhuweisky 阅读(3470) | 评论 (10) 编辑

使用 AOP 陷阱之一

posted @ 2005-12-27 15:37 zhuweisky 阅读(694) | 评论 (0) 编辑

Remoting Event 远程事件
摘要: 在.Net Remoting的应用中,经常碰到需要预定Remoting Object的事件的情况,要能使远程事件发布/预定如预期中的进行,需要注意如下问题:1. Remoting 配置 在Remoting配置文件中,需要将typeFilterLevel设置为Full,否则,将出现RemotingHandler无法序列化的异常。 如可能的channels配置:《Server端》 <channe...阅读全文

posted @ 2005-12-16 15:33 zhuweisky 阅读(2068) | 评论 (2) 编辑

分页管理器实现

posted @ 2005-12-14 09:48 zhuweisky 阅读(2066) | 评论 (4) 编辑

动态调用web服务
摘要: 通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。这样是使工作简单了,但是却和提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动为我们生成Web服务代理的限制。如果哪一天发布Web服务的URL改变了,则我们需要重新让VS.NET生成代理,并重新编译。在某些情况下,...阅读全文

posted @ 2005-12-07 13:25 zhuweisky 阅读(9869) | 评论 (14) 编辑

某公司的一道机考题的解答
摘要: 昨天看到某个公司招聘出的一道题目,题目是这样的:判断任意三个点是否构成三角形,以及某个点是否位于指定的三角形内。 关于这个问题,我给出了自己的答案,首先解决第一个问题: ///<summary>///IsTriangle判断集合中的头三个点PointF是否可以构成一个三角形///</summary>publicstaticboolIsTriangle(ArrayListptList){PointFpt0=(PointF)ptList[0];PointFpt1=(PointF)ptList[1];PointFpt2=(PointF)ptList[2];//如果有两个点相同阅读全文

posted @ 2005-10-16 11:54 zhuweisky 阅读(2897) | 评论 (20) 编辑

推荐所有的.NET开发人员阅读《J2EE Development without EJB》
摘要: 出手自Rod Johnson的《J2EE Development without EJB》是一本难得的好书,无论是对于Java程序员,还是.NET程序员。特别是对于.NET程序员,.NET平台的企业级应用还不是很多,.NET平台上的实用性的架构也远远不及J2EE这么成熟,所以我们.NET开发人员绝对有必要Open自己,到Java的世界去看看。 .NET世界里很多处于探索和试验阶段的技术实际上在J2EE中都有了很成熟的实现和应用。值得庆幸的是,在企业级开发的世界里,.NET正在迎头赶上。NHibernate出现了、Spring.NET出现了、AOP.NET、还有什么NUnit、NAnt、NDo.阅读全文

posted @ 2005-09-29 11:15 zhuweisky 阅读(3158) | 评论 (15) 编辑

EsbAOP应用--权限管理

posted @ 2005-09-28 12:06 zhuweisky 阅读(1963) | 评论 (1) 编辑

关于跨程序集的反射

posted @ 2005-09-23 12:52 zhuweisky 阅读(2554) | 评论 (3) 编辑

C++ 事件机制实现

posted @ 2005-09-10 22:35 zhuweisky 阅读(6498) | 评论 (5) 编辑

 
分类: C#专栏
上一篇:Socket测试工具(客户端、服务端)


下一篇:Linux系统性能测试工具(二)——内存压力测试工具memtester