Artech

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

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

2007年3月2日 #

[原创]WCF后续之旅(13):创建一个简单的SOAP Message拦截、转发工具-Part II

     摘要: 在Part I 中,我们创建了一个InterceptService,并且通过一个特殊的EndpointBehavior,ClientViaBehavior实现了message的拦截、转发功能。在本节中,我们将讨论另外一种不同的实现方式。如何说ClientViaBehavior是基于Client端的实现方式,那么我们今天讨论的是基于Service的实现方式。  阅读全文

posted @ 2008-09-02 09:20 Artech 阅读(1302) | 评论 (8)编辑

[原创]WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具 - Part I

     摘要: WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式。从Messaging的角度讲,WCF可以看成是对Message进行发送、传递、接收、基础的工具。对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端。实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用。比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance;可以创建一个消息拦截器(Interceptor)获取request或者response message,并进行Audit、Logging和Instrumentation。今天我们就我们的目光转向这些充当着中间人角色的Intermediary上面来。  阅读全文

posted @ 2008-09-01 09:37 Artech 阅读(1552) | 评论 (15)编辑

[原创-总结]谈谈基于SQL Server 的Exception Handling

     摘要: 对于所有的开发人员来说,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 阅读(362) | 评论 (2)编辑

[原创-总结] WCF后续之旅 [12篇]

     摘要: 《我的WCF之旅》系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10。由于工作原因,沉寂了一阵,两个月前开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能)。  阅读全文

posted @ 2008-08-26 12:33 Artech 阅读(1794) | 评论 (20)编辑

[原创]WCF后续之旅(12): 线程关联性(Thread Affinity)对WCF并发访问的影响

     摘要: 在本系列的上一篇文章中,我们重点讨论了线程关联性对service和callback的操作执行的影响:在service host的时候,可以设置当前线程的SynchronizationContext,那么在默认情况下,service操作的执行将在该SynchronizationContext下执行(也就将service操作包装成delegate传入SynchronizationContext的Send或者Post方法).对于Windows Form Application来讲,由于UI Control的操作执行只能在control被创建的线程中被操作,所以一这样的方式实现了自己的SynchronizationContext(WindowsFormsSynchronizationContext):将所有的操作Marshal到UI线程中。正因为如此,当我们通过Windows Form Application进行WCF service的host的时候,将会对service的并发执行带来非常大的影响。  阅读全文

posted @ 2008-08-25 12:45 Artech 阅读(1632) | 评论 (8)编辑

[原创]Enterprise Library深入解析与灵活应用(3):倘若将Unity、PIAB、Exception Handling引入MVP模式.. .. ..

     摘要: 最近在做一个Smart Client Software Factory的项目。熟悉SCSF或者CAB的都应该很清楚MVP这种设计模式。MVP是MVC的一种变体,View和Mode分别关注于UI的呈现和业务模型,View和Mode完全分离,View通过Presenter实现对业务模型的访问,Presenter“间接”地调用View实现对UI的操作。对于MVP中的异常处理,我们是直接通过Enterprise Library的Exception Handling Application Block来实现的。具体的做法是:在View中的每个控件的事件中添加try/catch block, 并在catch中通过ExceptionPolicy实现对异常的处理。这样导致的问题是,相同的代码重复散  阅读全文

posted @ 2008-08-22 09:29 Artech 阅读(1789) | 评论 (19)编辑

[原创]WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

     摘要: 对于一般的多线程操作,比如异步地进行基于文件系统的IO操作;异步地调用Web Service;或者是异步地进行数据库访问等等,是和具体的线程无关的。也就是说,对于这些操作,任意创建一个新的线程来执行都是等效的。但是有些情况下,有些操作却只能在固定的线程下执行。比如,在GUI应用下,对控件的访问就需要在创建该控件的线程下执行;或者我们在某个固定的线程中通过TLS(Thread Local Storage)设置了一些Context信息,供具体的操作使用,我们把操作和某个固定的线程的依赖称为线程关联性(Thread Affinity)。在这种情况下,我们的异步操作就需要被Marshal到固定的线程执行。在WCF并发或者Callback的情况下也具有这样的基于线程关联性的问题。  阅读全文

posted @ 2008-08-21 12:44 Artech 阅读(1914) | 评论 (9)编辑

[原创]Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

     摘要: 对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理、有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作)、Scalability(将数据进行缓存,减轻了对Database等资源的压力)和Availability(将数据进行缓存,可以应对一定时间内的网络问题、Web Service不可访问问题、Database的崩溃问题等等)。Enterprise Library的Caching Application Block为我们提供了一个易用的、可扩展的实现Caching的框架。借助于Caching Application Block,Administrator和Developer很容易实现基于Caching的管理和编程。由于Caching的本质在于将相对稳定的数据常驻内存,以避免对Persistent storage的IO操作的IO操作,所以有两个棘手的问题:Load Balance问题;Persistent storage和内存中数据同步的问题。本篇文章提供了一个解决方案通过SqlDependen  阅读全文

posted @ 2008-08-11 11:47 Artech 阅读(3028) | 评论 (24)编辑

[原创]MS Enterprise Library Policy Injection Application Block 深入解析[总结篇]

     摘要: Policy Injection Application Block(PIAB)是Enterprise Library众多Application Block中的一个。在我看来,PIAB和后来的Unity Application Block的推出在Enterprise Library的发展历程中具有重要的意思,它标志着Enterprise Library向真正框架上面发展。不再是仅仅关注于某个具体功能实现(比如Logging、Caching、DA、Security等等)。PIAB提供了一种易用的、可扩展的机制是你能够将你需要的Policy应用到对应的目标对象上。PIAB是为你实现AOP提供了又一个不错的选择。对了让读者全面地了解PIAB,能够灵活的使用PIAB为你项目开发服务,我先后写了6篇文章。现在将他们集中在一起,以飨读者。  阅读全文

posted @ 2008-08-08 09:15 Artech 阅读(3000) | 评论 (8)编辑

[原创]Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成

     摘要: Enterprise Library是微软P&P部门开发的众多Open source框架中的一个,最新的版本已经出到了4.0。由于接触Enterprise Library已经有很长的一段时间,在实际的项目中使用的频率也很高。对此有了一些积累,希望通过这个新的系列和广大网友一起分享和交流。本系列假设读者已经对Enterprise Library有一定的了解,故而不会对各个Application Block的基本原理和编程模型进行介绍,而把侧重点放在Enterprise Library深层次的实现原理、设计模式的应用、有效扩展和最佳实践上。今天我们讨论的内容是如何通过自定义UnityContainerExtension实现Unity和PIAB的集成.  阅读全文

posted @ 2008-08-06 09:19 Artech 阅读(3419) | 评论 (30)编辑

[原创]WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance

     摘要: 对于PerCall这种实例化方式来说,为每次service请求都创建新的service instance,有时候显得有点极端,频繁的对象创建会对系统的性能造成一定的影响。我们能够以池的机制进行对象的获取和创建呢:当service调用请求抵达service端,先试图从池中获取一个没有被使用的service instance,如何找到,直接获取该对象;否则创建新的对象。当service instance对象执行完毕,将对象释放到池中以供下次service 调用使用。  阅读全文

posted @ 2008-08-05 09:00 Artech 阅读(2620) | 评论 (16)编辑

[原创]WCF后续之旅(9): 通过WCF双向通信实现Session管理[Part II]

     摘要: 我们都知道,WCF支持Duplex的消息交换模式,它允许在service的执行过程中实现对client的回调。WCF这种双向通信的方式是我们可以以Event Broker或者订阅/发布的方式来定义和调用WCF Service。今天我们就给大家一个具体的例子:通过WCF的duplex communication方式现在Session管理。  阅读全文

posted @ 2008-08-04 09:53 Artech 阅读(2590) | 评论 (22)编辑

[原创]WCF后续之旅(9):通过WCF的双向通信实现Session管理[Part I]

     摘要: 我们都知道,WCF支持Duplex的消息交换模式,它允许在service的执行过程中实现对client的回调。WCF这种双向通信的方式是我们可以以Event Broker或者订阅/发布的方式来定义和调用WCF Service。今天我们就给大家一个具体的例子:通过WCF的duplex communication方式现在Session管理。  阅读全文

posted @ 2008-08-04 09:49 Artech 阅读(2383) | 评论 (9)编辑

[原创]一个通过BackgroundWorker实现WinForm异步操作的例子

     摘要: 在最近的一个Smart Client项目中,为了演示异步操作的实现,写了一个基于BackgorundWorker的例子。由于这个理基本上实现了BackgorundWorker的大部分功能:异步操作的启动、操作结束后的回调、异步操作的撤销和进度报告等等。尽管没有太多的技术含量,姑且放上来与大家分享。  阅读全文

posted @ 2008-07-30 09:44 Artech 阅读(2468) | 评论 (10)编辑

[原创]WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成

     摘要: 在上一篇文章中,我们通过自定义InstanceProvider实现了WCF和微软Enterprise Library Unity Application Block的集成, 今天我们已相同的方式实现WCF与Enterprise Library的另一个Application Block的集成:Policy Injection Application Block (PIAB)。  阅读全文

posted @ 2008-07-29 09:22 Artech 阅读(2195) | 评论 (11)编辑

[原创]WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成

     摘要: 松耦合、高内聚是我们进行设计的永恒的目标,如何实现这样的目标呢?我们有很多实现的方式和方法,不管这些方式和方法在表现形式上有什么不同,他们的思想都可以表示为:根据稳定性进行关注点的分离或者分解,交互双方依赖于一个稳定的契约,而降低对对方非稳定性因素的依赖。从抽象和稳定性的关系来讲,抽象的程度和稳定程度成正相关关系。由此才有了我们面向抽象编程的说法,所以“只有依赖于不变,才能应万变”... ...  阅读全文

posted @ 2008-07-28 09:15 Artech 阅读(2189) | 评论 (6)编辑

[原创]WCF后续之旅(6): 通过WCF Extension实现Context信息的传递

     摘要: 在上一篇文章中,我们讨论了如何通过CallContextInitializer实现Localization的例子,具体的做法是将client端的culture通过SOAP header传到service端,然后通过自定义的CallContextInitializer设置当前方法执行的线程culture。在client端,当前culture信息是通过OperationContext.Current.OutgoingMessageHeaders手工至于SOAP Header中的。实际上,我们可以通过基于WCF的另一个可扩展对象来实现这段逻辑,这个可扩展对象就是MessageInspector。我们今天来讨论MessageInspector应用的另外一个场景:如何通过MessageInspector来传递Context信息。  阅读全文

posted @ 2008-07-24 09:06 Artech 阅读(2277) | 评论 (12)编辑

[原创]WCF后续之旅(5): 通过WCF Extension实现Localization

     摘要: 在上一篇文章中, 我列出了WCF一系列的可扩展对象和元素,并简单介绍了他们各自的功能、适合的场景和具体解决的问题。从本篇开始我将通过一个个具体的例子来介绍如何利用这些扩展点对WCF进行扩展,从而解决一些我们在实现的项目开发中可能出现的问题。  阅读全文

posted @ 2008-07-17 09:15 Artech 阅读(1701) | 评论 (15)编辑

[原创]WCF后续之旅(4):WCF Extension Point 概览

     摘要: 在本系列的每篇文章中,我多次提到WCF是一个极具可扩展性的分布是消息通信框架。为了让读者对WCF Extension有一个总体的的认识,在这里我会简单列举了我们经常使用的绝大部分的扩展点,以及通过这些扩展点能够解决实现项目开发中的那些问题。  阅读全文

posted @ 2008-07-16 09:11 Artech 阅读(1710) | 评论 (9)编辑

[原创]WCF后续之旅(3): WCF Service Mode Layer 的中枢—Dispatcher

     摘要: 在本系列的第一部分、第二部分中,我们对WCF的channel layer进行了深入的讨论。我们接下来继续讨论WCF的ser vice mode layer。本篇文章着重介绍service 端的ServiceMode。写作此篇文章旨在达到以下两个目的: 希望读者对ServiceMode有一个大致的了解,结合前面介绍的channel layer的相关知识,帮助读者了解WCF的整个实现机制和执行的流程。 介绍ServiceMode涉及到的绝大部分extension point,让读者在具体的项目开发中能够根据实际的需要灵活、自由地对WCF进行扩展。  阅读全文

posted @ 2008-07-15 09:14 Artech 阅读(1826) | 评论 (30)编辑

[原创]WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel

     摘要: 在上一篇文章中,我们通过一个直接借助BasicHttpBinding对象实现Client和Server端进行通信的例子,对WCF channel layer进行了一个大致上的介绍。由此引出了一些列通信相关的概念和对象,比如Channel,Output channel, Input channel,Request channel, Reply Channel,Duplex channel, Channel Shape,Channel manager,Channel factory, Channel listener, Binding element 等。通过这些元素,我们很容易地实现对WCF channel layer进行扩展。 在本章节中,我们将继续讨论WCF channel layer。我们将通过如何创建和应用custom channel来介绍channel layer一些知识。  阅读全文

posted @ 2008-07-09 09:14 Artech 阅读(1656) | 评论 (12)编辑

[原创]WCF后续之旅(1): WCF是如何通过Binding进行通信的

     摘要: 《我的WCF之旅》系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10。由于工作原因,沉寂了几个月,今天开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Extension实现一些在真正的分布式项目开发中很有现实意义的功能)。  阅读全文

posted @ 2008-07-08 09:03 Artech 阅读(2415) | 评论 (38)编辑

[原创]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 阅读(3011) | 评论 (18)编辑

[原创]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 阅读(2783) | 评论 (22)编辑

[原创]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 阅读(3106) | 评论 (24)编辑

[原创]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 阅读(3650) | 评论 (31)编辑

[原创]谈谈基于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 阅读(2434) | 评论 (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 阅读(2430) | 评论 (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 阅读(2699) | 评论 (7)编辑

[原创]谈谈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 阅读(2907) | 评论 (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 阅读(2706) | 评论 (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 阅读(2770) | 评论 (16)编辑

[原创]谈谈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 阅读(3095) | 评论 (13)编辑

[原创-总结]深入理解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 阅读(4949) | 评论 (26)编辑

[原创]深入理解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 阅读(2888) | 评论 (11)编辑

[原创]深入理解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 阅读(3356) | 评论 (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 阅读(7257) | 评论 (61)编辑

[原创]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 阅读(4552) | 评论 (20)编辑

[原创]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 阅读(4999) | 评论 (14)编辑

[原创]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 阅读(6262) | 评论 (53)编辑

[原创]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 阅读(3168) | 评论 (17)编辑

[原创]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 阅读(3577) | 评论 (20)编辑

[求职].NET 高级软件工程师(上海)

     摘要:   阅读全文

posted @ 2007-08-22 22:19 Artech 阅读(2172) | 评论 (43)编辑

[原创]深入理解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 阅读(3573) | 评论 (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 阅读(1247) | 评论 (8)编辑

[原创]深入理解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 阅读(3489) | 评论 (38)编辑

[原创]深入理解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 阅读(3762)