随笔分类 -  [02] 编程技巧

上一页 1 ··· 9 10 11 12 13 14 下一页
摘要:在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中。服务对外提供统一的接口,服务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合、编排成为一个有机的整体。在这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Service Coordination)。而具体来讲,一个分布式的活动可能会执行几秒钟,比如银行转帐;也可能执行几分钟、几个小时、几天甚至更长,比如移民局处理移民的申请。事务,无疑是属于短暂运行服务协作(Short-Running Service Coordination)的范畴。 阅读全文
posted @ 2010-01-31 13:22 Artech 阅读(42550) 评论(18) 推荐(20) 编辑
摘要:在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法。该方法对用于创建基于现有Transaction对象的“依赖事务(DependentTransaction)”。不像可提交事务是一个独立的事务对象,依赖事务依附于现有的某个事务(可能是可提交事务,也可能是依赖事务)。依赖事务可以帮助我们很容易地编写一些事务型操作,当环境事务不存的时候,可以确保操作在一个独立的事务中执行;当环境事务存在的时候,则自动加入其中。 阅读全文
posted @ 2010-01-31 09:19 Artech 阅读(11948) 评论(16) 推荐(19) 编辑
摘要:在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务。.NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集中的System.Transactions命名空间下,我们直接称基于此的事务为System.Transactions事务。System.Transactions事务编程模型使我们可以显式(通过System.Transactions.Transaction)或者隐式(基于System.Transactions.TransactionScope)的方式进行事务编程。 阅读全文
posted @ 2010-01-30 16:49 Artech 阅读(23284) 评论(21) 推荐(36) 编辑
摘要:在《上篇》中,我通过使用Delegate的方式解决了服务调用过程中的异常处理以及对服务代理的关闭。对于《WCF技术剖析(卷1)》的读者,应该会知道在第7章中我通过类似于AOP的方式解决了相似的问题,现在我们来讨论这个解决方案。 阅读全文
posted @ 2010-01-08 20:49 Artech 阅读(8522) 评论(30) 推荐(10) 编辑
摘要:在进行基于会话信道的WCF服务调用中,由于受到并发信道数量的限制,我们需要及时的关闭信道;当遇到某些异常,我们需要强行中止(Abort)信道。在真正的企业级开发中,正如我们一般不会让开发人员手工控制数据库连接的开启和关闭一样,我们一般也不会让开发人员手工去创建、开启、中止和关闭信道,这些工作是框架应该完成的操作。这篇文章,我们就来介绍如果通过一些编程技巧,让开发者能够无视“信道”的存在,像调用一个普通对象一样进行服务调用。 阅读全文
posted @ 2010-01-04 19:46 Artech 阅读(10572) 评论(47) 推荐(12) 编辑
摘要:在上篇中我们谈到:将一个生命周期较短的对象(对象A)注册到一个生命周期较长(对象B)的某个事件(Event)上,两者便无形之间建立一个引用关系(B引用A)。这种引用关系导致GC在进行垃圾回收的时候不会将A是为垃圾对象,最终使其常驻内存(或者说将A捆绑到B上,具有了和B一样的生命周期)。这种让无用的对象不能被GC垃圾回收的现象,在托管环境下就是一种典型的内存泄漏问题。我们今天将会着重解释其背后的原因。 阅读全文
posted @ 2009-12-06 22:57 Artech 阅读(7245) 评论(35) 推荐(16) 编辑
摘要:在前面一篇文章中,我通过对三种Infragistics 控件(UltraToolBarManager、UltraGird和UltraListView)进行扩展,以实现对ToolTip样式的定义,今天我来介绍如何采用相同的方式实现另外一个更为常用的功能:在UltraGrid的Header中动态添加CheckBox,从而实现对所有数据行进行全选的功能。 阅读全文
posted @ 2009-12-05 01:19 Artech 阅读(5086) 评论(12) 推荐(5) 编辑
摘要:最近这两天一直在忙着为一个项目检查内存泄漏(Memory Leak)的问题,对相关的知识进行了一下简单的学习和探索,其间也有了一些粗浅的经验积累,今天特意写一篇相关的文章与大家分享。那些对内存泄漏稍微有点了解的人,对于本篇文章的标题,相信不会觉得是在危言耸听。就我查阅的资料,已经这两天的发现也证实了这一点:觉得部分的内存泄漏问题与事件(Event)有关。本篇文章将会介绍其原理,以及如何发现和解决由事件导致的内存泄漏问题。 阅读全文
posted @ 2009-12-03 21:02 Artech 阅读(17626) 评论(44) 推荐(22) 编辑
摘要:Infragistics是全球领先的UI工具和用户体验的专家,Infragistics开发了一系列的炫目的Windows、Web、WPF和Silverlight控件,相信很多人在使用它们。我们现在的项目就在使用Infragistics的Windows Form控件集。虽然这些控件功能强大,也不可能满足你所有的需求,尤其是那些比较苛刻的最终用户的需求。比如,我们最近就接收到这样的需求:让所以菜单项、工具栏按钮、网格单元的ToolTip以气球式的样式显示。最终,我通过对现有控件的扩展实现这个要求。 阅读全文
posted @ 2009-12-02 22:41 Artech 阅读(5400) 评论(29) 推荐(3) 编辑
摘要:最近,用户提出了一个要求:需要通过按键方式来控制容器控件竖直滚动条。具体来讲就是说,如果一个容器内容过多,用户可以通过按键PageUp和PageDown来控制上下的滚动。刚开始,我试图采用注册事件的方式来实现,但是效果不理想,一来是没有一个单一的地方来对所有相关空间进行事件注册操作,二来如果容器被子控件完全遮挡,容器空间的事件将不会正常出发。有个同事提示采用自定义MessageFilter的方式,我觉得可行,于是进行了一番尝试。 阅读全文
posted @ 2009-11-06 23:47 Artech 阅读(3586) 评论(10) 推荐(4) 编辑
摘要:HP QC(Quantity Center)是一款不错的测试管理工具,最近把公司的操作系统从Windows XP升级到Windows 7之后,发现登录到QC Server的Addin页面,很多客户端组件不能正常下载,从而导致整个QC不能使用。通过Google找到了解决方案,特发出来与大家共享,希望那些在Windows 7上使用HP QC的朋友遇到该问题的时候,能过及时得到解决。 阅读全文
posted @ 2009-11-06 11:15 Artech 阅读(15867) 评论(19) 推荐(3) 编辑
摘要:VS2010 Beta 1发布还一阵了,相信很多人已经开始尝鲜了。不知道大家有没有遇到过这样的问题:当打开VS2010的时候,出现这样一个初始化界面。但是几秒钟之后,初始化界面消失,但是VS2010的UI界面并没有出现。但是通过Task Manager查看进程列表,Devenv.exe进行却在运行。我先后遇到了两次,第一次是在Windows 7上安装VS 2010 Team Suit,我还以为是Windows 7的问题。昨天在Windows Server 2008上安装有遇到这样的问题,我以为是安装过程出现问题,于是卸掉重装,问题依然存在。在网上也没有找到任何相关信息,整整折腾了一天。后来通过通过命令行,对VS进行重新设置后解决了这个问题。 阅读全文
posted @ 2009-05-30 13:38 Artech 阅读(9174) 评论(26) 推荐(3) 编辑
摘要:今天看到看到一篇MSDN文章《Parallelizing Operations With Dependencies》,作者是微软Parallel Computing Platform团队的一个开发经理。文中提供出一种用于并行执行一组具有依赖关系的操作的解决方案,这不由得想起我在一年之前写的一个具有相同的功能的组件。于是翻箱倒柜找了出来,进行了一些加工,与大家分享一下。 阅读全文
posted @ 2009-05-22 23:30 Artech 阅读(3854) 评论(22) 推荐(2) 编辑
摘要:开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: List actions = new List(); //...... foreach (var action in actions) { ThreadPool.QueueUserWorkItem(state = action(), null); } Console.Read(); 但是出现错误的输出结果...... 阅读全文
posted @ 2009-05-22 09:31 Artech 阅读(31149) 评论(46) 推荐(15) 编辑
摘要:下面通过一个简单的Console Application演示Type Innitializer的执行顺序。希望大家各抒己见,对于实验的结果给出一个圆满的解释,同时希望读者从中理解到更多关于编译、关于CLR一些被我们忽略的细节。 阅读全文
posted @ 2008-11-01 15:57 Artech 阅读(7021) 评论(21) 推荐(5) 编辑
摘要:对于稍微有点经验的.NET开发人员来说,倘若被问及如何保持线程同步,我想很多人都能说好好几种。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerServices.MethodImplAttribute无疑是最为简洁的一种方式。MethodImplAttribute可以用于instance method,也可以用于static method。当在某个方法上标注了MethodImplAttribute,并指定MethodImplOptions.Synchronized参数,可以确保在不同线程中运行的该方式以同步的方式运行。我们几天来讨论MethodImplAttribute(MethodImplOptions.Synchronized)和lock的关系。 阅读全文
posted @ 2008-10-17 09:16 Artech 阅读(12760) 评论(29) 推荐(18) 编辑
摘要:对于所有的开发人员来说,Exception Handling是我们每天都要面对的事情。对于基于Source Code的Exception Handling,我想大家已经司空见惯了,但是对于Database级别的Exception Handling,就没有那么常见了。在这篇文章中,我将会介绍我对于基于Database编程中Exception Handling的一些粗浅的认识:在编写Stored Procedure时,如何抛出一个可预知的Exception,ADO.NET如何处理从Database抛出的Exception,如何保存基于Database Exception的Error Message,如何在Database和.NET Application之间进行消息的传递[注:这里的Database主要指SQL Server]。 阅读全文
posted @ 2008-08-28 13:44 Artech 阅读(4213) 评论(7) 推荐(2) 编辑
摘要:在最近的一个Smart Client项目中,为了演示异步操作的实现,写了一个基于BackgorundWorker的例子。由于这个理基本上实现了BackgorundWorker的大部分功能:异步操作的启动、操作结束后的回调、异步操作的撤销和进度报告等等。尽管没有太多的技术含量,姑且放上来与大家分享。 阅读全文
posted @ 2008-07-30 09:44 Artech 阅读(13247) 评论(15) 推荐(17) 编辑
摘要:在谈谈基于SQL Server 的Exception Handling - PART II中,我给出了一个完整的例子说明了:如何在将message定义在sys.messages中保证message的一致性和可维护性;如何在Stored procedure中使用RAISERROR将一个可预知的Error抛出;如何在Stored procedure中使用TRY/CATCH进行异常的捕捉;在Application如果处理从SQL Server抛出的Exception。实际上,SQL Server database Engine抛出、被我们的.NET最终捕获的SqlException,我们通过SqlException的属性可 阅读全文
posted @ 2007-12-17 12:53 Artech 阅读(4509) 评论(9) 推荐(2) 编辑
摘要:在上面一节中,我通过RAISERROR重写了创建User的Stored procedure,实际上上面的Stored procedure是有问题的。我之所以没有立即指出,是因为这是一个很容易犯的错误,尤其是习惯了.NET Exception Handling的人更容易犯这样的错误。我们知道在.NET Application中,如果出现一个未处理的Exception,程序将立即终止,后续的程序将不会执行,但是对于上面的SQL则不一样,虽然我们通过RAISERROR将Error抛出,但是SQL的指定并不会被终止,INSERT语句仍然会被执行的。我想很多人会说在RAISERROR后加一个Return就可以了嘛。不错这是一个 阅读全文
posted @ 2007-12-17 12:41 Artech 阅读(5201) 评论(4) 推荐(2) 编辑

上一页 1 ··· 9 10 11 12 13 14 下一页