Artech

Develop every application as an art using the most suitable technologies!

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

2008年2月21日 #

[原创]Enterprise Library Policy Injection Application Block 之四:如何控制CallHandler的执行顺序

     摘要: PIAB为我们提供了一个很好地实现AOP的方式。AOP旨在实现Business Logic和Non-Business Infrastructure Logic的分离。通过PIAB,我们将这些业务无关的逻辑定义在一个个的CallHandler中,然后通过Attribute或者Configuration的方式,将我们所需的CallHandler运用到相应的目标对象中。从这个意义上讲,PIAB具有很好的Flexibility和Extensibility。但是,就我看来PIAB也具有一些不足之处,其最大的局限性在于:不能控制运用到某个Method的多个方法的执行顺序。而让CallHandler按照我们希望的顺序进行调用是非常有必要的。  阅读全文

posted @ 2008-02-21 09:40 Artech 阅读(2544) | 评论 (18)编辑

2008年2月19日 #

[原创]Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)

     摘要: 本系列的第一部分对PIAB使用场景进行了简单的介绍,作中阐述了通过PI(Policy Injection)的方式实现了Business Logic和Non-Business Infrastructure Logic的分离,从而实现了AOP(Aspect Oriented Programming)。在第二部分中详细介绍PIAB的实现机制:通过自定义RealProxy的方式实现了Method Injection。通过这几天接收到的网友的留言,觉得很多人对在具体的项目开发中如何使用PIAB还有很多困惑,对PIAB的价值还不是很了解。为此,在本系列的第三篇文章中,我将以Walk through的方式定义一个Custom CallHa  阅读全文

posted @ 2008-02-19 09:15 Artech 阅读(2357) | 评论 (14)编辑

2008年1月31日 #

[原创]Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理

     摘要: 在前面一篇文章中,我对Enterprise Library中的PIAB (Policy Injection Application Block)作了简单的介绍。在这篇文章主要谈谈我个人对PIAB设计和实现原理的一些理解。在介绍过程中,我尽量采用由浅入深出的方式,同时结合例子、Source Code。希望通过本片文章让大家对PIAB有一个全面、深刻的认识。  阅读全文

posted @ 2008-01-31 09:45 Artech 阅读(2562) | 评论 (24)编辑

2008年1月29日 #

[原创]Enterprise Library Policy Injection Application Block 之一: PIAB Overview

     摘要: 在过去的半年里,定期或者不定期地写点东西已经成为了我的一种习惯。可是最近两个月来一直忙于工作的事情一直足够的时间留给自己,虽然给自己列了很长一串写作计划,可是心有余而力不足。这一段工作主要是帮助公司开发一套分布式的开发框架,对一些技术和设计方法有了一些新的认识。这两天的工作主要是如何把Enterprise Library V3.1的PIAB(Policy Injection Application Block)引入到我们自己的框架中,为此对PIAB进行了一些研究,借此机会与大家一起分享。  阅读全文

posted @ 2008-01-29 12:54 Artech 阅读(2934) | 评论 (29)编辑

2007年12月17日 #

[原创]谈谈基于SQL Server 的Exception Handling - PART III

     摘要: 在谈谈基于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的属性可以得到Error的相关信息。下面是SqlException的属性列表:  阅读全文

posted @ 2007-12-17 12:53 Artech 阅读(2205) | 评论 (7)编辑

[原创]谈谈基于SQL Server 的Exception Handling - PART II

     摘要: 在上面一节中,我通过RAISERROR重写了创建User的Stored procedure,实际上上面的Stored procedure是有问题的。我之所以没有立即指出,是因为这是一个很容易犯的错误,尤其是习惯了.NET Exception Handling的人更容易犯这样的错误。我们知道在.NET Application中,如果出现一个未处理的Exception,程序将立即终止,后续的程序将不会执行,但是对于上面的SQL则不一样,虽然我们通过RAISERROR将Error抛出,但是SQL的指定并不会被终止,INSERT语句仍然会被执行的。我想很多人会说在RAISERROR后加一个Return就可以了嘛。不错这是一个常用的解决方案,但是我不倾向于使用这种方法。为了更清楚地说明这个问题,我们举另一个相关的例子,上面我们介绍了创建User的例子,我们现在来引入另一个例子:如何将一个User添加到一个Role里面  阅读全文

posted @ 2007-12-17 12:41 Artech 阅读(2200) | 评论 (6)编辑

[原创]谈谈基于SQL Server 的Exception Handling - PART I

     摘要: 对于所有的开发人员来说,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 @ 2007-12-17 08:38 Artech 阅读(2450) | 评论 (7)编辑

2007年11月27日 #

[原创]谈谈WCF中的Data Contract(4):WCF Data Contract Versioning

     摘要: 软件工程是一门独特的工程艺术,需要解决的是不断改变的需求变化。而对于WCF,对于SOA,由于涉及的是对多个系统之间的交互问题,如何有效地解决不断改变的需求所带来的问题就显得更为重要:Service端版本的变化能否保持现有Consumer的正常调用,Consumer端的改变不至于影响对Service 的正常调用。对于Data Contract来说就是要解决这样的问题:Service端或者Client对Data Type的改变不会影响Service的正常调用。

在系统开发过程中,通过对Data Type添加额外的字段进而对其进行扩展,是一个种很常见的场景。本部分就作中介绍Data Contract的这种变化,Service或者Client的Data Contract在本地添加一个新的Data Member会造成怎样的影响,WCF可以采用怎样的机制来解决这种单方面Data Contract版本的改变。
  阅读全文

posted @ 2007-11-27 21:06 Artech 阅读(2599) | 评论 (23)编辑

[原创]谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持

     摘要: 在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList)。我们现在就来详细地讨论一下基于Collection & Dictionary 的Data Contract。  阅读全文

posted @ 2007-11-27 20:55 Artech 阅读(2349) | 评论 (9)编辑

[原创]谈谈WCF中的Data Contract(2):WCF Data Contract对Generic的支持

     摘要: 通过第一部分的介绍,我们可以体会到,WCF 的Data Contract在CLR Type和Neutral Contract之间搭建了一座桥梁,弥合了.NET世界和厂商中立世界的差异。通过WCF Data Contract我们将CLR Data Type暴露成一个厂商中立的数据结构的描述,同样通过WCF Data Contract我们将一个现有的CLR Data Type和既定的Neutral contract进行适配。

在.NET中,基于Primary Type,比如Int32,String等等,他们具有一个简单的默认的序列化方式和结构,可以说他们不需要Data Contract。接下来我们主要讨论的是一些相对比较特殊的、完全基于.NET的Data Type,比如Generic、Collection,和Dictionary。首先,我们结合例子来谈谈基于Generic的Data Type的Data Contract。
  阅读全文

posted @ 2007-11-27 20:43 Artech 阅读(2448) | 评论 (15)编辑

[原创]谈谈WCF中的Data Contract (1):Data Contract Overview

     摘要: SOA一个主要的目标就是促进不同技术平台的互操作,要真正实现这样一个宏伟的目标是一件极不容易的事情,需要不同的厂商和标准组织相互协作,制定一个大家一致遵循的标准。这样一个标准就是WS-* 。我们很清楚,无论个个厂商各自的标准怎样千差万别,但是有个标准是他们必须要遵循的,那就是Internet的标准,如果哪家公司拒绝Internet,那肯定要被淘汰的。而对于Internet,基于Http的网络协议和基于XML的数据表达已经成为了事实上的标准。对于SOA来说,XML不仅仅用于表示Service调用携带的数据(参数和返回值),更用于表示这个调用本身,以及满足各种要求的控制信息, 比如基于Security、Session、Reliable Messaging、Transaction等等的控制信息。WS-*就是一个基于XML的标准。而对于SOA中的Contract所要做的就是寻求一种厂商中立的方式来表示Service的接口、和用于交互的数据结构。前者就是Service Contract、后者就是Data Contract。  阅读全文

posted @ 2007-11-27 20:32 Artech 阅读(2693) | 评论 (12)编辑

2007年10月7日 #

[原创-总结]深入理解C# 3.x的新特性系列总结

     摘要: 较之C# 2.0, C# 3.x引入了一些列新的特性,为我们编程带来很大的便利,通过有效地利用这些新特性,我们可以编写出更加简洁、优雅的程序。不过这些新特性仅仅是编译器给我们耍的小花招:在编译的时候加入一些必要的Code,使这些在C# 2.0角度看略显残缺的Code变得“完整”,实际上最终生成的Assembly和在C# 2.0时代并没有本质的不同。为此,有些人对这些新特性不以为然,觉得仅仅是一些表面文章,是鸡肋。但是我的观点是:既然这些特性能给我们的编程带来便利,干嘛不用呢?  阅读全文

posted @ 2007-10-07 12:38 Artech 阅读(4390) | 评论 (26)编辑

2007年9月30日 #

[原创]深入理解C# 3.x的新特性(5):Object Initializer 和 Collection Initializer

     摘要: 深入理解C# 3.x的新特性系列自开篇以后,已经有两个月了。在前面的章节中,我们先后深入讨论了C# 3.x新引入的一些列新特性:Anomynous Type、Extension Method、Lambda Expression、Automatically Implemented Property,今天我们来讨论本系列的涉及的另外两个简单的Feature: Object Initializer 和 Collection Initializer。  阅读全文

posted @ 2007-09-30 17:17 Artech 阅读(2653) | 评论 (11)编辑

2007年9月15日 #

[原创]深入理解C#3.x的新特性(4):Automatically Implemented Property

     摘要: 深入理解C#3.x的新特性系列在沉寂一个月之后,今天继续。在本系列前3部分中,我们分别讨论了Anonymous TypeExtension Method Lambda Expression,今天我们来讨论另一个实用的、有意思的New feature: Automatically Implemented Property。  阅读全文

posted @ 2007-09-15 21:07 Artech 阅读(3046) | 评论 (30)编辑

[原创]"我的WCF之旅"系列阶段性总结

     摘要: WCF是构建和运行Connected System的一些列技术的总称,它是建立在Web Service Architecture上的一个全新的Communication Infrastructure。你可以把它看成是.NET平台上的新一代的Web Service。WCF为我们提供了Secure & Reliable的Messaging,也为我们提供了更好的Interoperability是的我们可以和其他的平台进行互操作。
在过去半年之后,我陆陆续续写了一些关于WCF介绍的一些文章,我把它命名为“我的WCF之旅”,目的在于向大家分享我学习WCF这一段旅程。现在把把这个系列做一个阶段性的总结,以飨读者。这个总结并不是意味着我将结束这个系列,这个系列还会继续,新加的内容我会补上。  阅读全文

posted @ 2007-09-15 13:01 Artech 阅读(6345) | 评论 (60)编辑

2007年9月13日 #

[原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II

     摘要: 相信这篇文章的每个读者都使用个过ASP.NET进行过基于Web的应用开发, ASP.NET是什么?如果站在一个相对High Level的角度,我们可以这样来定义ASP.NET:ASP.NET是一个基于Web的开发平台,提供构建企业级应用所需的Service、Programming Model和Software的Infrastructure。如果我们以一个Low Level的角度来看,它本质上就是一个消除处理器:他接受IIS(确切地说应该是ASP.NET ISAPI)Forward的Http Request经过一系列的处理,最终产生一个用户希望的Response。所以本篇文章的主要目的在于站在一个相对Low Level的角度介绍ASP.NET的整个Http Request Processing Model。在第一个部分我分别就IIS 5.x和IIS 6的差异介绍了IIS对Http Request的处理,今天我  阅读全文

posted @ 2007-09-13 02:15 Artech 阅读(4188) | 评论 (18)编辑

[原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part I

     摘要: 相信这篇文章的每个读者都使用个过ASP.NET进行过基于Web的应用开发, ASP.NET是什么?如果站在一个相对High Level的角度,我们可以这样来定义ASP.NET:ASP.NET是一个基于Web的开发平台,提供构建企业级应用所需的Service、Programming Model和Software的Infrastructure。如果我们以一个Low Level的角度来看,它本质上就是一个消除处理器:他接受IIS(确切地说应该是ASP.NET ISAPI)Forward的Http Request经过一系列的处理,最终产生一个用户希望的Response。所以本篇文章的主要目的在于站在一个相对Low Level的角度介绍ASP.NET的整个Http Request Processing Model。在第一个部分我分别就IIS 5.x和IIS 6的差异介绍了IIS对Http Request的处理,今天我  阅读全文

posted @ 2007-09-13 01:59 Artech 阅读(4569) | 评论 (14)编辑

2007年9月9日 #

[原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI

     摘要: 前几天有一个朋友在MSN上问我“ASP.NET 从最初的接收到Http request到最终生成Response的整个流程到底是怎样的?”我觉得这个问题涉及到IIS和ASP.NETASP.NET Runtime的处理模型的问题,并不是三言两语就能说清楚的,所以决定写这样一篇介绍IIS和ASP.NET Runtime Process Model的文章,谈谈我对此的一个粗浅的认识,如果有什么不对的地方,希望大家及时指正。  阅读全文

posted @ 2007-09-09 16:43 Artech 阅读(5637) | 评论 (45)编辑

2007年8月24日 #

[原创]T-SQL Enhancement in SQL Server 2005 - Part II

     摘要: 在第一部分中,我们讨论了APPLYCTE这两个T-SQL Enhancement。APPLY实现了Table和TVF的Join,CTE通过创建“临时的View”的方式使问题化繁为简。现在我们接着来讨论另外两个重要的T-SQL Enhancement Items:PIVOTRanking。  阅读全文

posted @ 2007-08-24 23:16 Artech 阅读(2937) | 评论 (17)编辑

2007年8月23日 #

[原创]T-SQL Enhancement in SQL Server 2005 - Part I

     摘要: 较之前一版本,SQL Server 2005可以说是作出了根本性的革新。对于一般的编程人员来说,最具吸引力的一大特性就是实现了对CLR的寄宿,使我们可以使用任意一种.NET Programming Language来编写Stored Procedure、Function、Trigger、Custom Type等等。但是并不意味着我们使用多年的T-SQL即将被淘汰,而事实上T-SQL仍然是我们最为常见的基于Database的编程语言。 为了使编程人员更容易地使用T-SQL来实现一些较为复杂的功能,SQL Server 2005在T-SQL进行了一系列的改进,这篇文章将概括性地介绍这些T-SQL Enhancement。  阅读全文

posted @ 2007-08-23 21:46 Artech 阅读(3354) | 评论 (20)编辑

2007年8月22日 #

[原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression

     摘要: 继上一章,介绍Extension Method之后,我们接着来介绍另一个重要的特性:Lambda Expression。在前面的两篇文章中,我一再在强调这样的一个概念:C# 3.x新引入的这些特性仅仅反映在Programming Language和相应的Compiler层面。通过编译生成的Assembly的IL和原来并没有本质的改变。从这个意义上讲,所有的这些其实是编译器给我们玩得障眼法而已。Lambda Expression也不例外, Lambda Expression就是一个Anonymous Delegate,无论是Named Delegate也好、Anonymous Delegate也好,其本质也就是一个Delegate。  阅读全文

posted @ 2007-08-22 13:44 Artech 阅读(3254) | 评论 (26)编辑

[转载]MSIL Instruction Table

     摘要: Throughout this text, I've often employed the ILDASM utility to illustrate the Microsoft intermediate language (MSIL) that the C# compiler generates. I used ILDASM to give you a more complete understanding of the lower-level workings of the C# compiler. Although I briefly explain what each MSIL instruction does in the context of the chapter in which the instruction is used, I thought it would be nice to have a central listing of all the instructions. In the following table, I list each MSIL inst  阅读全文

posted @ 2007-08-22 11:39 Artech 阅读(1081) | 评论 (8)编辑

2007年7月19日 #

[原创]深入理解C# 3.x的新特性(2):Extension Method - Part II

     摘要: 通过《深入理解C# 3.0的新特性(2):Extension Method - Part I》介绍,我们知道了在C# 中如何去定义一个Extension Method:它是定义在一个Static class中的、第一个Parameter标记为this关键字的Static Method。在这一部分中,我们进一步来认识Extension Method的本质... ...  阅读全文

posted @ 2007-07-19 13:47 Artech 阅读(3258) | 评论 (38)编辑

2007年7月18日 #

[原创]深入理解C# 3.x的新特性(2):Extension Method - Part I

     摘要: 在C#3.0中,引入了一些列新的特性,比如: Implicitly typed local variable, Extension method,Lambda expression, Object initializer, Anonymous type, Implicitly typed array, Query expression, Expression tree. 个人觉得在这一系列新特性的,最具创新意义的还是Extension method,它从根本上解决了这样的问题:在保持现有Type原封不动的情况下对其进行扩展,你可以在对Type的定义不做任何变动的情况下,为之添加所需的方法成员。在继 深入理解C# 3.0的新特性(1): Anonymous Type 之后,在这篇文章中,我将介绍我自己对Extension method这个新特性的理解。  阅读全文

posted @ 2007-07-18 01:30 Artech 阅读(3490) | 评论 (41)编辑

2007年7月15日 #

[原创]深入理解C# 3.x的新特性(1): Anonymous Type

     摘要: 在C#3.0中,引入了一个新的Feature:Anonymous Method,允许我们已Inline的方式来定义Delegate,为Developer在Coding的时候带来了很大的便利。在C#3.0中,我们又有了另一个相似的Feature:Anonymous Type。Anonymous Type允许我们已Inline的方式的创建一个基于未知类型、具有所需数据结构的对象。  阅读全文

posted @ 2007-07-15 21:50 Artech 阅读(4463) | 评论 (26)编辑

2007年7月10日 #

一首最好听的足球队歌,见证往日的辉煌

     摘要: 今天在网上无意中听到这首歌,计算一下已经有10年没听到了,眼泪哗啦哗啦的。这首歌把我带回到十年前,中国甲A的黄金时期。当时的四川全兴队虽然不是中国最好的球队,但是绝对是中国最有激情的球队。魏大侠(魏群),马儿(马明宇),黎兵,姚夏,......在四川的受欢迎的程度绝对不亚于今天的周杰伦,因为那里有最好的球迷... ...  阅读全文

posted @ 2007-07-10 18:57 Artech 阅读(1432) | 评论 (7)编辑

[原创]谈谈基于Kerberos的Windows Network Authentication - Part III

     摘要: 通过[原创]谈谈基于Kerberos的Windows Network Authentication - Part II 3个Sub-protocol的介绍,我们可以全面地掌握整个Kerberos的认证过程。实际上,在Windows 2000时代,基于Kerberos的Windows Authentication就是按照这样的工作流程来进行的。但是我在上面一节结束的时候也说了,基于3个Sub-protocol的Kerberos作为一种Network Authentication是具有它自己的局限和安全隐患的。我在整篇文章一直在强调这样的一个原则:以某个Entity的Long-term Key加密的数据不应该在网络中传递。原因很简单,所有的加密算法都不能保证100%的安全,对加密的数据进行解密只是一个时间的过程,最大限度地提供安全保障的做法就是:使用一个Short-term key... ...  阅读全文

posted @ 2007-07-10 02:12 Artech 阅读(2432) | 评论 (30)编辑

2007年7月7日 #

[原创]谈谈基于Kerberos的Windows Network Authentication - Part II

     摘要: 通过[原创]谈谈基于Kerberos的Windows Network Authentication - Part I 的介绍,我们发现Kerberos实际上一个基于Ticket的认证方式。Client想要获取Server端的资源,先得通过Server的认证;而认证的先决条件是Client向Server提供从KDC获得的一个有Server的Master Key进行加密的Session Ticket,可以这么说,Session Ticket是Client进入Server领域的一张门票。而这张门票必须从一个合法的Ticket颁发机构获得,这个颁发机构就是Client和Server双方信任的KDC, 同时这张Ticket具有超强的防伪标识:它是被Server的Master Key加密的... ...  阅读全文

posted @ 2007-07-07 15:15 Artech 阅读(2618) | 评论 (26)编辑

2007年7月5日 #

[原创]谈谈基于Kerberos的Windows Network Authentication - Part I

     摘要: 前几天在给人解释Windows是如何通过Kerberos进行Authentication的时候,讲了半天也别把那位老兄讲明白,还差点把自己给绕进去。后来想想原因有以下两点:对于一个没有完全不了解Kerberos的人来说,Kerberos的整个Authentication过程确实不好理解——一会儿以这个Key进行加密、一会儿又要以另一个Key进行加密,确实很容易把人给弄晕;另一方面是我讲解方式有问题,一开始就从Kerberos的3个Sub-protocol全面讲述整个Authentication 过程,对于一个完全不了解Kerberos的人来说要求也忒高了点。为此,我花了一些时间写了这篇文章,尽量以由浅入深、层层深入的方式讲述我所理解的基于Kerberos的Windows Network Authentication,希望这篇文章能帮助那些对Kerberos不明就里的人带来一丝帮助。对于一些不对的地方,欢迎大家批评指正。  阅读全文

posted @ 2007-07-05 18:44 Artech 阅读(3274) | 评论 (32)编辑

2007年7月1日 #

[原创]我的WCF之旅(13):创建基于MSMQ的Responsive Service

     摘要: 我们知道MSMQ天生就具有异步的特性,它只能以One-way的MEP(Message Exchange Pattern)进行通信。Client和Service之间采用One-way MEP的话就意味着Client调用Service之后立即返回,它无法获得Service的执行结果,也无法捕捉Service运行的Exception。
但是在有些场景 中,这是无法容忍的。再拿我在上一篇文章的Order Delivery的例子来说。Client向Service提交了Order,却无法确认该Order是否被Service正确处理,这显然是不能接受的。我们今天就来讨论一下,如何创建一个Responsive Service来解决这个问题:Client不再是对Service的执行情况一无所知,它可以获知Order是否被Service正确处理了。  阅读全文

posted @ 2007-07-01 16:06 Artech 阅读(3793) | 评论 (32)编辑

2007年6月29日 #

[原创]我的WCF之旅(12):使用MSMQ进行Reliable Messaging

     摘要: 在一个分布式的环境中,我们往往需要根据具体的情况采用不同的方式进行数据的传输。比如在一个Intranet内,我们一般通过TCP进行高效的数据通信;而在一个Internet的环境中,我们则通常使用Http进行跨平台的数据交换。而这些通信方式具有一个显著的特点,那就是他们是基于Connection的,也就是说,交互双方在进行通信的时候必须保证有一个可用的Connection存在于他们之间。而在某些时候,比如那些使用拨号连接的用户、以及使用便携式计算机的用户,我们不能保证在他们和需要访问的Server之间有一个的可靠的连接,在这种情况下,基于Messaging Queue的连接就显得尤为重要了。我们今天就来谈谈在WCF中如何使用MSMQ。  阅读全文

posted @ 2007-06-29 00:57 Artech 阅读(3826) | 评论 (25)编辑

2007年6月18日 #

[原创]我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯

     摘要: 在一个基于面向服务的分布式环境中,借助一个标准的、平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互。这个交互的过程实际上就是Message Exchange的过程。WCF支持不同形式的Message Exchange,我们把这称之为Message Exchange Pattern(MEP), 常见的MEP包括: Request/Reply,Request/Forget(One-way)和Duplex。通过采用Duplex MEP,我们可以实现在Service端Callback Client的操作。虽然WCF为我们实现底层的通信细节,使得我们把精力转移到业务逻辑的实现,进行Transport无关的编程,但是对底层Transport的理解有利于我们根据所处的具体环境选择一个合适的Transport。说到Transport, WCF 经常使用的是以下4个:Http,TCP,Named Pipe,MSMQ。由于不同协议自身的差异,他们对具体MEP的支持方式也会不同,我们今天就来谈谈Http和TCP对Duplex  阅读全文

posted @ 2007-06-18 18:32 Artech 阅读(4684) | 评论 (54)编辑

2007年6月15日 #

[原创]我的WCF之旅(10):如何在WCF进行Exception Handling

     摘要: 在任何Application的开发中,对不可预知的异常进行troubleshooting时,异常处理显得尤为重要。对于一般的.NET系统来说,我们简单地借助try/catch可以很容易地实现这一功能。但是对于 一个分布式的环境来说,异常处理就没有那么简单了。按照面向服务的原则,我们把一些可复用的业务逻辑以Service的形式实现,各个Service处于一个自治的环境中,一个Service需要和另一个Service进行交互,只需要获得该Service的描述(Description)就可以了(比如WSDL,Schema和Strategy)。借助标准的、平台无关的通信构架,各个Service之间通过标准的Soap Message进行交互。Service Description、Standard Communication Infrastructure、Soap Message based Communication促使各Service以松耦合的方式结合在一起。但是由于各个Service是自治的,如果一个Service调用另一个Service,在服务提供方抛出的Exception必须被封装在S  阅读全文

posted @ 2007-06-15 02:18 Artech 阅读(3791) | 评论 (15)编辑

2007年6月14日 #

[原创]我的WCF之旅(9):如何在WCF中使用tcpTrace来进行Soap Trace

     摘要: 无论对于Web Service还是WCF,Client和Service之间交互的唯一形式是通过发送和接收Soap Message。在我们对Web Service和WCF进行深入学习的时候,借助一些Soap Trace 工具对Soap Message进行深入剖析是非常有必要的。在这些工具之中,我觉得最好用的就是Microsoft Soap Toolkit中的Soap Trace Utility和tcpTrace。我们今天就来讲讲如何在WCF中使用tcpTrace这个工具。  阅读全文

posted @ 2007-06-14 00:19 Artech 阅读(4325) | 评论 (20)编辑

2007年6月13日 #

[原创]我的WCF之旅(8):WCF中的Session和Instancing Management

     摘要: 我们知道,WCF是MS基于SOA建立的一套在分布式环境中各个相对独立的Application进行Communication的构架。他实现了最新的基于WS-*规范。按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service。对于承载着某个业务功能的实现的Service应该具有Context无关性、甚至是Solution无关性,Service才能实现最大限度的重用。
在一个C/S(Client/Service)场景中,Context无关性体现在Client对Service的每次调用都是完全不相关的。但是在有些情况下,我们却希望系统为我们创建一个Session来保留某个Client和Service的进行交互的状态。所以,像Web Service一样,WCF也提供了对Session的支持。对于WCF来说,Client和Service之间的交互都通过Soap Message来实现的,每次交互的过程就是一次简单的Message Exchange。所以从Messaging的角度来讲,WCF的Session就是把某个把相关的Messag  阅读全文

posted @ 2007-06-13 01:59 Artech 阅读(4279) | 评论 (31)编辑

2007年6月4日 #

[原创]What is "Type" in managed heap?

     摘要: 我们知道,在程序运行过程中,每个对象(object)都是对应了一块内存,这里的对象不仅仅指的是某个具体类型的实例(instance),也包括类型(type)本身。我想大家也很清楚 CLR如何为我们创建一个类型的实例(instance)的:CLR计算即将被创建的Instance的size(所有的字段加上额外的成员所占的空间: TypeHandle和SyncBlockIndex);在当前AppDomain对应的managed heap中为之开辟一块连续的内存空间;初始化Instance的这两个额外的成员TypeHandle和SyncBlockIndex ;最后调用对应的constructor。

在面向对象的原则下,Instance的 Field代表的是对象的状态(state), 而方法则体现的是对象的行为(behavior)。状态只能和具体的Instance绑定在一起,而属于同一类型的不同的Instance则具有一样的行为,所以行为是和Type绑定在一起的。同时Type定义了很多原数据的信息。这些基于Type的信息是如何保存的,今天我们就来简单地讨论这个问题。  阅读全文

posted @ 2007-06-04 03:50 Artech 阅读(3276) | 评论 (30)编辑

2007年5月31日 #

[原创]再说String

     摘要: 在前两个月的时间内,我在园子里发表的两片介绍字符串的恒定性的文章:《字符串的驻留(String Interning)》和《深入理解string和如何高效地使用string》。前几天Anytao在他的《品味类型---值类型与引用类型(中)-规则无边》的文章中,针对字符串的恒定性展开了很好的讨论,昨天首页上又出现了亚历山大同志的讨论性质的帖子《关于String的终极解释》。大家已经讨论得很完备了,在这里我只是根据我自己的理解对此作一些补充。  阅读全文

posted @ 2007-05-31 00:54 Artech 阅读(3801) | 评论 (28)编辑

2007年5月26日 #

[原创] 深入剖析ASP.NET的编译原理之二:预编译(Precompilation)

     摘要: Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹。借助该工具,是我们的开发显得更加高效而轻松。从Microsoft把这个IDE的名字从VS.NET 该为VS(比如原来的Visual Studio.NET 2003,现在的版本叫VS2005),可以MS对该IDE的期望和野心:MS要把它改造成一个万能的IDE。不过任何都有其两面性,对于我们广大的开发者来说,VS是我们的各种行为简单化,傻瓜化;但是在另一方面,他也会蒙蔽我们的眼睛,使我们对它背后做的事情视而不见。以我们的ASP.NET Website开发为例,编程、编译、部署都可以借助VS,有了VS一切显得如此简单,每个人都会做,但是我想很多一部分人对一个ASP.NET Website如何进行编译不会很了解。这篇文章就来谈谈背后的故事——ASP.NET是如何进行编译的。由于篇幅的问题整篇文章分两个部分:动态编译 Dynamical Compilation和预编译(Precompilation)。  阅读全文

posted @ 2007-05-26 00:32 Artech 阅读(4369) | 评论 (33)编辑

2007年5月21日 #

[原创]深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

     摘要: Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹。借助该工具,是我们的开发 显得更加高效而轻松。从Microsoft把这个IDE的名字从VS.NET 该为VS(比如原来的Visual Studio.NET 2003,现在的版本叫VS2005),可以MS对该IDE的期望和野心:MS要把它改造成一个万能的IDE。不过任何都有其两面性,对于我们广大的开发者来说,VS是我们的各种行为简单化,傻瓜化;但是在另一方面,他也会蒙蔽我们的眼睛,使我们对它背后做的事情视而不见。以我们的ASP.NET Website开发为例,编程、编译、部署都可以借助VS,有了VS一切显得如此简单,每个人都会做,但是我想很多一部分人对一个ASP.NET Website如何进行编译不会很了解。这篇文章就来谈谈背后的故事——ASP.NET是如何进行编译的。由于篇幅的问题整篇文章分两个部分:动态编译Dynamical Compilation和预编译(Precompilation)。  阅读全文

posted @ 2007-05-21 00:22 Artech 阅读(5061) | 评论 (38)编辑

2007年5月18日 #

[转自天涯论坛]我能证明武大郎和姚明的身高差不多——遥与厉以宁大师切磋大法

     摘要: 背景:英国《经济观察报》2007年5月8日讯:中国著名经济学家、北京大学厉以宁教授最近提出的新基尼系数理论在国际经济学界引起极大震动。
      
厉以宁教授的理论是,按中国现阶段城乡二元经济的情况来分析,先算出两个基尼系数:一个是城市的基尼系数,另一个是农村的基尼系数,然后再加权平均,算出一个总基尼系数。这个总基尼系数可以在一定程度上代表中国的贫富分化状况。

在天涯论坛上看这样一篇文章,很有意思。  阅读全文

posted @ 2007-05-18 11:34 Artech 阅读(1313) | 评论 (7)