摘要:

在项目开发中,我们会使用到很多的描述性文字,比如验证消息、错误消息和确认消息等,让这些文本消息具有可维护性具有重要的意义。在我们的项目开发中使用的是专门的一个维护消息的组件。在这篇文章中将会通过扩展现有的ValidationAttribute特性让ASP.NET MVC应用可以使用我们的消息组件来获取验证消息。
阅读全文
posted @ 2011-12-14 10:45
Artech
阅读(5810)
推荐(14)
摘要:

谈到IoC和ASP.NET的集成,很多人会先后想到Ninject,不过我们个人还是倾向于Unity。这篇文章简单地介绍如果创建基于Unity的ControllerFactory。
阅读全文
posted @ 2011-12-13 16:35
Artech
阅读(9116)
推荐(7)
摘要:

本篇通过自定义ASP.NET MVC的异常筛选器实现了与EntLib的EHAB(Exception Handling Application Block)的集成,使我们可以通过配置的方式来定义异常处理策略,并最终通过错误页面显示被处理过的异常信息。[源代码从这里下载]
阅读全文
posted @ 2011-12-13 13:28
Artech
阅读(6462)
推荐(13)
摘要:

在《通过一个模拟程序让你明白ASP.NET MVC是如何运行的》一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序。[源代码从这里下载]
阅读全文
posted @ 2011-12-07 21:25
Artech
阅读(11796)
推荐(33)
摘要:

如果采用自我寄宿的方式,我们需要为每个寄宿的服务创建ServiceHost对象。但是一个应用往往具有很多服务需要被发布,基于单个服务的ServiceHost的创建将会变成一个很繁琐的事情。如果我们能够采用某种机制来读取所有配置的服务,并自动为它们创建相应的ServiceHost对象,这无疑是一种理想的方式。
阅读全文
posted @ 2011-12-07 12:03
Artech
阅读(8278)
推荐(13)
摘要:

ASP.NET MVC的路由系统通过对HTTP请求的解析得到表示Controller、Action和其他相关的数据,并以此为依据激活Controller对象,调用相应的Action方法,并将方法返回的ActionResult写入HTTP回复中。为了更好的演示其实现原理,我创建一个简单的ASP.NET Web应用来模拟ASP.NET MVC的路由机制。这个例子中的相关组件基本上就是根据ASP.NET MVC的同名组件设计的,只是我将它们进行了最大限度的简化,因为我们只需要用它来演示大致的实现原理而已。
阅读全文
posted @ 2011-12-05 19:52
Artech
阅读(23998)
推荐(123)
摘要:

IIS 7.0因引入WAS提供了对非HTTP协议的支持。这个对于WCF的服务寄宿来说意义重大,它意味着我们通过IIS/WAS寄宿的服务终结点不仅仅可以采用BasicHttpBinding、WSHttpBinding/WS2007HttpBinding等基于HTTP协议的绑定,也可以采用NetTcpBinding、NetNamedPipeBinding和NetMsmqBinding。
阅读全文
posted @ 2011-12-04 22:56
Artech
阅读(6949)
推荐(10)
摘要:

Unity是微软P&P部门开发的一个轻量级IoC框架,通过Interception机制可以实现基于三种拦截机制的AOP。不过Unity仅仅提供“显式”拦截机制,以致我们为了注册可被拦截的类型会多写很多代码和配置。本篇文章通过UnityContainer的扩展提供了一种“自动”拦截机制。
阅读全文
posted @ 2011-12-01 23:12
Artech
阅读(4445)
推荐(12)
摘要:

在定义和寄宿WCF服务的时候会面临三个名称/命名空间,它们分别是ServiceContractAttribute、ServiceBehaviorAttribute和Binding的Name和Namespace属性,很对人对此不能很好地区分。
阅读全文
posted @ 2011-11-13 10:00
Artech
阅读(13297)
推荐(20)
摘要:

现在我们通过一个实例来演示终结点的地址报头如何影响实现终结点选择的消息筛选机制。这个实例通过为服务端终结点指定地址报头实现针对客户端的授权,让经过许可的客户端才能访问这个服务。具体来说,我们将一个代码序列号的GUID作为终结点的地址报头。对于客户端发送的消息,只有具有相应的报头才能访问服务。
阅读全文
posted @ 2011-11-12 10:44
Artech
阅读(5798)
推荐(9)
摘要:

终结点是整个WCF的核心,由经典的ABC三要素组成。作为表示地址的EndpointAddress,很多人仅仅将其看成是一个表示标识服务并且表示服务所在地址的Uri,其实服务标识和定位服务仅仅是EndpointAddress一个基本的功能,它不仅仅是Uri那么简单。
阅读全文
posted @ 2011-11-11 12:59
Artech
阅读(11174)
推荐(11)
摘要:

作为.NET Framework的一部分,几乎每个版本.NET Framework的推出都会为WCF带来一些改变。针对于最新版本的.NET Framework 4.0,一些新的特性被引入到WCF。对于这些基于.NET Framework版本的更替而带来的针对WCF的变化,我个人是这么看待的:WCF在随着.NET Framework 3.0发布的时候就具有一个成熟的架构设计,可扩展性即使一个重要的衡量标准。基于后续版本的.NET Framework发布的WCF并没有像WF一样出现“革新”型的改变,很多都是利用了这个可扩展性的通信平台开发出来的新特性,WCF 4.0也不例外。
阅读全文
posted @ 2011-10-28 08:41
Artech
阅读(16542)
推荐(19)
摘要:

WCF所谓的安全审核就是针对认证和授权所做的针对EventLog的日志记录。我们不但可以设置进行审核的事件(认证成功/失败,授权成功或失败),还可以选择记录信息被写入的EventLog类型,即应用程序日志还是安全日志。WCF的安全审核是通过ServiceSecurityAuditBehavior服务行为实现的。
阅读全文
posted @ 2011-10-27 08:17
Artech
阅读(6389)
推荐(8)
摘要:

在Managed模式下,可用服务的终结点通过发现代理来统一管理。客户端在进行可用目标服务探测和解析的时候直接向发现代理进行探测和解析请求就可以了。这篇文章通过一个简单的实例为你演示如果通过创建发现代理实现可用服务的实时维护。服务可以在上下线的时候自动注册和注销,客户端可以动态地向发现代理查询当时可用的服务。
阅读全文
posted @ 2011-10-26 09:12
Artech
阅读(5152)
推荐(3)
摘要:

在《原理篇》我们对客户端如何监听通知,以及服务在上下线时如何发送通知从原理上进行了深入地剖析。我们现在通过一个简单的实例演示如何通过ServiceDiscoveryBehavior服务行为为寄宿的服务添加一个实现上/下线通知的AnnouncementEndpoint终结点,以及客户端如何通过对AnnouncementService服务的寄宿实现对通知的监听和接收。[
阅读全文
posted @ 2011-10-25 12:00
Artech
阅读(5614)
推荐(7)
摘要:

到目前为止,我们所介绍的都是基于客户端驱动的服务发现模式,也就是说客户端主动发出请求以探测和解析可用的目标服务。在介绍WS-Discovery的时候,我们还谈到另外一种服务驱动的模式,即服务在上线和下线的时候主动对外发出Hello/Bye通知。
阅读全文
posted @ 2011-10-25 08:37
Artech
阅读(6405)
推荐(10)
摘要:

前面两篇我们分别介绍了可被发现服务如何被发布,以及客户端如果探测可用的服务。接下来我们通过一个简单的例子来演示如果创建和发布一个可被发现的服务,客户端如何在不知道服务终结点地址的情况下动态探测可用的服务并调用之。
阅读全文
posted @ 2011-10-09 09:26
Artech
阅读(6057)
推荐(12)
摘要:

在《服务如何能被”发现”》中我们着重讨论了可被发现的服务(Discoverable Service)如何通过ServiceDiscoveryBehavior行为的服务通过标准终结点DiscoveryEndpoint发布出来。现在我们来谈服务发现的另一个方面:客户端如何动态地探测可用的目标服务?
阅读全文
posted @ 2011-10-09 07:11
Artech
阅读(6475)
推荐(5)
摘要:

要让作为服务消费者的客户端能够动态地发现可用的服务,首先的要求服务本身具有可被发现的特性。那么到底一个可被发现的服务和一个一般的服务有何不同呢?或者说如何让一个一般的服务在寄宿的时候能够被它潜在的消费者“探测”到呢?
阅读全文
posted @ 2011-10-08 08:09
Artech
阅读(9571)
推荐(17)
摘要:

我们传统的服务调用的模式都是这样的:客户端在设计时就预先知道目标服务的地址,并基于这个地址创建客户端终结点对服务进行调用。而我们即将介绍的新特性则是你在预先不知道目标服务的地址的情况下,可以动态地探测可用的服务并调用之。WCF-Discovery并不是微软在.NET平台下的闭门造车,而是基于一个开放的标准,即我们接下来着重介绍的WS-Discovery。也就是说,如果JAVA平台的Web服务也是基于相同的WS-Discovery标准,那么它们也可以被WCF客户端“发现”。
阅读全文
posted @ 2011-10-07 19:25
Artech
阅读(7274)
推荐(11)
摘要:

今天写《WCF技术剖析(卷2)》关于“队列服务”部分,看了《WCF服务编程》相关的内容。里面介绍一个关于“终结点不能共享相同的消息队列”说法,个人觉得这值得商榷。撰写此文,希望对此征求大家的意见。
阅读全文
posted @ 2011-10-06 16:00
Artech
阅读(3892)
推荐(5)
摘要:

在《来源于WCF的设计模式:可扩展对象模式》我通过一个简单的例子介绍了基于IExtensibleObject和IExtension这两个接口为核心的“可扩展对象模式”。我之前是通过编程的方式来应用扩展对象的。其实,如何能够通过配置的方式来定义扩展,这个所谓的“可扩展对象模式”将会发挥更大的威力。
阅读全文
posted @ 2011-09-29 14:12
Artech
阅读(3214)
推荐(7)
摘要:

我一直很喜欢剖析微软一些产品、框架的底层实现。在我看来,这不但让我们可以更加深入地了解其运作的原理,同时也能提高设计/架构的技能。因为对于这些框架或者产品来说,高质量的设计是它们能够成功的一个最基本的因素。这些应用在这些产品和框架上的设计其实是最值得我们学习的设计案例。比如说,今天我们介绍的“可扩展对象模式”就来源于WCF。
阅读全文
posted @ 2011-09-28 22:12
Artech
阅读(5243)
推荐(10)
摘要:

为了解决EntLib的EHAB只能在异常类型级别控制异常处理策略的局限,我在很久之前曾经自定义了一个特殊的异常处理器来提供“细粒度”异常策略的定义。我个人觉得具有一定的实用价值,今天特意对其进行了重构,并将其放到了我在CodePlex上新创建的项目EntLib Extensions。
阅读全文
posted @ 2011-09-27 18:49
Artech
阅读(3535)
推荐(8)
摘要:

在本篇文章中,我们将通过一个具体的实例来演示如何通过路由服务。在这个例子中,我们会创建连个简单的服务HelloServie和GoodbyeService。假设客户端不能直接调用这两个服务,需要使用到路由服务作为两者之间的中介。
阅读全文
posted @ 2011-09-25 08:24
Artech
阅读(8193)
推荐(11)
摘要:

在一个典型的服务调用场景中,具有两个基本的角色,即服务的消费者和服务的提供者。从消息交换的角度讲前者一般是消息的最初发送者,而后者则是消息的最终接收者。在很多情况下,由于网络环境的局限,消息的最初发送者和最终接收者不能直接进行消息交换,这就需要一个辅助实现消息路由的中介服务,这就是我们接下来要介绍的路由服务。
阅读全文
posted @ 2011-09-23 14:51
Artech
阅读(9254)
推荐(13)
摘要:

今天介绍WCF 4.0的另外两个新特性:标准终结点和无(.SVC)文件服务激活。前者实现了针对典型通信场景对终结点的定制,后者让你在进行IIS/WAS的服务寄宿中无须定义.svc文件。
阅读全文
posted @ 2011-09-20 09:04
Artech
阅读(9848)
推荐(15)
摘要:

对于传统的WCF配置系统,无论是绑定的配置还是行为(服务行为和终结点行为)都必须具有一个名称。而正是通过整个配置名称,它们才能被应用到目标对象(终结点或者服务)上。而在实际的项目开发中,绝大部分服务或者终结点都具有相同的绑定和行为,如果能够定义一种默认的绑定和行为,这无疑会简化我们的配置。WCF4.0为此提供了一个新的特性以支持默认绑定和行为的配置。
阅读全文
posted @ 2011-09-19 08:20
Artech
阅读(7946)
推荐(15)
摘要:

很多WCF的初学者是从之前的Web服务上转移过来的,他们非常怀念.asmx Web服务无配置的服务寄宿方式。你只需要在定义Web服务的时候再表示服务操作的方法上应用WebMethodAttribute特性就可以了,完全可以不需要手工进行相应的配置。WCF 4.0通过默认终结点添加机制为你提供无配置服务寄宿的支持。
阅读全文
posted @ 2011-09-18 16:57
Artech
阅读(10495)
推荐(21)
摘要:

WCF从第一个版本的推出到现在,整个架构体系基本上没有出现大的变化。在我看来,可扩展性的设计是WCF的架构体系能够在一段不短的时期内保持稳定的一个最主要的原因。而反观于WCF几乎同时推出的WF,各个版本演进的历史,你会发现几乎WF推出的每一个版本都是“革新性”的改变。正是因为WCF具有极大的扩展性,WCF新的版本的功能本身就可以通过这些丰富的扩展点来实现,而作为最终使用者的我们也可以实现我们自己的扩展,使WCF能够按照我们希望的方式来运作。
阅读全文
posted @ 2011-09-16 09:05
Artech
阅读(9314)
推荐(16)
摘要:

今天写《WCF技术剖析(卷2)》关于《WCF扩展》一章,举了“如何通过WCF扩展实现与IoC框架(以Unity为例)集成”(《通过自定义ServiceHost实现对WCF的扩展[实例篇]》)的例子。为了展示Unity如何实现几种典型的注入方式(构造器注入、属性注入和方法注入),我写了一个简单的小程序。如果读者对Unity或者IoC没有太多概念,我觉得这个小程序对于你初步地认识它们具有一定的帮助意义。如果你对Unity或者IoC有深入的认识,请忽略本文。
阅读全文
posted @ 2011-09-15 17:52
Artech
阅读(21082)
推荐(41)
摘要:

在《原理篇》中我们谈到了通过自定义ServiceHost对WCF进行扩展的本质,以及在IIS/WAS寄宿情况下ServiceHostFactory的作用。接下来通过一个具体的例子来演示如何通过WCF扩展实现以Unity为代表的IoC框架的集成,以及应用该扩展的ServiceHost和ServiceHostFactory如何定义。
阅读全文
posted @ 2011-09-15 11:30
Artech
阅读(11320)
推荐(19)
摘要:

在创建ServiceHost的时候,WCF会加载服务相关的配置并将其作为服务的描述信息附加到ServiceHost对象上,我们也可以在开启ServiceHost之前对其服务描述信息进行相应的修改。ServiceHost在开启之前具有的服务描述信息将会决定在开启之后创建的服务端运行时框架。所以如果我们通过自定义ServiceHost对象并根据具体应用场景的具体需求对其服务描述进行定制,同样可以起到对WCF服务端进行扩展的目的。
阅读全文
posted @ 2011-09-14 09:51
Artech
阅读(6444)
推荐(5)
摘要:

为了让读者对如何利用相应的行为对WCF进行扩展有个深刻的认识,在这里我提供一个简单的实例演示。本实例模拟的场景是这样的:我们创建一个支持多语言的资源服务,该服务旨在为调用者提供基于某种语言的文本型资源。但是,我们不希望客户端在每次调用服务的时候都显式地制定具体的语言,而是根据客户端服务调用线程表示语言文化的上下文来自动识别所需的语言。
阅读全文
posted @ 2011-09-13 08:27
Artech
阅读(6189)
推荐(16)
摘要:

作为最为常用的扩展方式,WCF的四大行为的使用主要体现在两个方面:其一、WCF自身提供的很多特性和功能是通过行为的方式来实现的;其二、作为使用WCF的应用,可以通过自定义的行为来实现解决具体问题的扩展。本篇文章为你讲述WCF四大行为(服务行为、终结点行为、契约行为和操作行为)的本质。
阅读全文
posted @ 2011-09-12 10:09
Artech
阅读(6341)
推荐(11)
摘要:

当基于某个终结点创建的ChannelFactory被开启的之后,位于服务模型层的客户端运行时框架被成功构建。站在编程的角度看ChannelFactory,它就是一个创建用于服务调用的服务代理对象的工厂。由于服务调用需要借助于服务代理来完成,我们很有必要从整个客户端运行架构层面来了解服务代理和基于服务代理的服务调用是如何实现的。
阅读全文
posted @ 2011-09-10 11:04
Artech
阅读(4066)
推荐(5)
摘要:

对于一般的编程人员来说,进行WCF的服务调用之需要通过添加服务引用通过获取元数据生成服务代理类型,或者直接通过ChannelFactory创建用于服务调用的代理对象即可。但是比是否知道当我们创建、开启ChannelFactory的时候,以及用它来创建服务代理的是否WCF内部为我们作了哪些工作?对于一个简单的服务调用,WCF客户端又是采用怎样的处理流程?本篇文章将会给你答案。
阅读全文
posted @ 2011-09-09 18:30
Artech
阅读(6056)
推荐(18)
摘要:

对于需要进行大规模数据传输的WCF应用来说,对于请求消息和回复消息进行传输前的压缩,不但可以降低网络流量,也可以提高网络传输的性能。由于WCF的扩展性,我们可以采用不同的方式实现对消息的压缩,本文提供一种比较简单的实现方式。
阅读全文
posted @ 2011-08-07 08:50
Artech
阅读(14841)
推荐(40)
摘要:

终结点分发器在自己的运行时中对请求消息的处理最终肯定体现在相应操作的执行。如果从服务描述的角度来看,操作是一个OperationDescription对象。而服务端分发运行时中的操作则代表的是一个DispatchOperation对象。作为服务描述的一部分,服务所有终结点的所有操作描述(OperationDescription)在ServiceHost创建过程中被创建。而当ServiceHost被正常开始时,这些操作描述最终转换成分发操作(DispatchOperation)。而DispatchRuntime的Operations属性代表了对应终结点的所有分发操作。
阅读全文
posted @ 2011-07-24 22:07
Artech
阅读(5793)
推荐(7)
摘要:

作为WCF中一个核心概念,终结点在不同的语境中实际上指代不同的对象。站在服务描述的角度,我们所说的终结点实际上是指ServiceEndpoint对象。如果站在WCF服务端运行时框架来说,终结点实际上指代的是终结点分发器(EndpointDispatcher)。两者是一一匹配的,并且前者是创建后者的基础。而终结点分发器具有自己的运行,即分发运行时(DispatchRuntime)。
阅读全文
posted @ 2011-07-23 15:07
Artech
阅读(6210)
推荐(10)