而作为一种基于可扩展性的通信框架,WCF在授权方面提供了扩展点,使你可以根据的你实际需要定制相应的授权策略。...AuthorizationPolicy创建基于自定义授权策略的声明 四、通过自定义ServiceAuthorizationManager根据声明作出最后的授权判断 一、Claim和ClaimSet...的扩展,我们通过自定义AuthorizationPolicy和ServiceAuthorizationManager来让WCF按照我们自定义的授权策略进行访问控制。...这两个对象是如何参与到WCF的授权执行流程中的呢?...AuthorizationPolicy创建基于自定义授权策略的声明 整个自定义授权先从AuthorizationPolicy开始。
在《原理篇》中,我们谈到WCF自定义授权体系具有两个核心的组件:AuthorizationPolicy和ServiceAuthorizationManager,已经它们是如何写作最终提供一种基于声明的授权实现...为了让自定义授权有深刻的理解,我们来进行一个简单实例来演示如何通过自定义这两个组件实现“非角色授权策略”。...此外,还有一点需要注意的是:在做出成功授权的情况下,需要设置当前的安全主体,因为不管这个安全主体是否需要,WCF总是会试图从当前AuthorizationContext的属性列表中去获取该安全主体。...是否能够按照我们自定义的策略进行授权。...而程序执行的最终结果是和我们自定义的授权策略是一致的:用户Foo仅仅授予了调用Add和Substract操作的权限,而其余两个授权给用户Bar。
实际上,WCF的安全体系本就提供相应的扩展,使你能够自由地实现安全主体的提供方式。...通过怎样的方式被应用到WCF的授权运行时呢?...从当前AuthorizationContext获取安全主体之前对其进行初始化,整个基于安全主体的授权体系就能正常运作,而这个工作可以通过自定义ServiceAuthorizationManager来实现...ServiceAuthorizationManager最终还是通过ServiceAuthorizationBehavior这个服务行为应用到WCF授权框架体系中。...[WCF权限控制]利用WCF自定义授权模式提供当前安全主体[原理篇] [WCF权限控制]利用WCF自定义授权模式提供当前安全主体[实例篇]
AuthorizationPolicy实现授权 四、通过自定义ServiceAuthorizationManager实现授权 一、创建自定义AuthorizationPolicy...二、创建自定义ServiceAuthorizationManager 接下来我们来通过自定义ServiceAuthorizationManager来实现与上面完全一样的功能,而已授权策略很简单,我们照例将该自定义...三、通过自定义AuthorizationPolicy实现授权 现在我们常见一个实例程序来应用我们创建的自定义AuthorizationPolicy,看看它是否能够起到我们期望的授权的作用。...四、通过自定义ServiceAuthorizationManager实现授权 在证明我们自定义的AuthorizationPolicy确实能够按照我们定义的策略进行授权之后,我们来试试我们自定义的ServiceAuthorizationManager...[WCF权限控制]利用WCF自定义授权模式提供当前安全主体[原理篇] [WCF权限控制]利用WCF自定义授权模式提供当前安全主体[实例篇]
通过这些介绍我们知道:如果我们在实施授权的时候,当前线程的安全主体能够被正确设置,我们就可以正确地完成授权。...基于相同的原理,对于WCF的服务授权,如果正确的安全主体能够在服务操作被执行之前被正确设置到当前线程,借助于这个安全主体,我们不但可以采用命令式编程的方式将授权逻辑写在相应的操作中,也可以采用声明式编程的方式将授权策略定义在应用在服务操作方法上的...为了解决这个问题,WCF为我们提供了不同的方案,我们把这些方案成为不同的“安全主体权限模式(Principal Permission Mode)”。具体来说,WCF支持如下三种安全主体权限模式。...帐号,将该帐号所在的用户组作为权限集; 采用ASP.NET Roles提供程序:通过ASP.NET角色管理机制借助于某个RoleProvider获取基于当前认证用户的角色列表,并将其作为权限集; 自定义权限模式...:自定义权限解析和安全主体创建机制。
同理,一个WCF服务的监听与执行同样需要通过一个进程来承载。我们将为WCF服务创建或指定一个进程的方式称为服务寄宿(Service Hosting)。...客户端行为体现的是WCF如何进行服务调用的方式,而服务端行为则体现了WCF的请求分发方式。...AddBindingParameters:为某个自定义绑定元素(Custom Binding Element)添加绑定参数,以指导或者确保绑定元素的正常操作,比如通过设置的绑定参数创建相应的信道 ApplyDispatchBehavior...ServiceBehaviorAttribute不仅仅是一个自定义特性(Custom Attribute),实际上它本身就是一个实现了IServiceBehavior的服务行为。...,比如用于实现与ASP.NET兼容的AspNetCompatibilityRequirementsAttribute;用于进行限流控制的ServiceThrottlingBehavior;用于进行服务授权的
WCF异常处理体系剖析 1.3.1. FaultFormatter 1.3.2. ServiceDebugBehavior如何实现对异常细节传播? 1.4. WCF异常处理扩展 1.4.1....实例演示:通过WCF扩展实现同EntLib的集成(S105) 第2章元数据 (Metadata) 2.1. WCF元数据架构体系简介 2.1.1. WS-MEX 2.1.2....实例演示:通过WCF扩展实现授权(S805) 8.4. 自定义授权方式 8.4.1....自定义授权实现原理剖析 8.4.4. 实例演示:通过自定义AuthorizationPolicy和ServiceAuthorizationManager实现授权(S806) 8.5....ServiceHost对WCF的扩展 9.4.1. 自定义ServiceHost的本质:对服务描述进行定制 9.4.2.
此外,几乎所有的WS-*规范在WCF的实现都是通过自定义信道来控制消息交换来完成的,所以这也要求客户端和服务端必须具有对等的信道设置; 契约(Contract):契约最终决定了基于某个操作的服务调用应该采用的消息交换模式...二、客户端架构体系 WCF服务端架构体系的建立始于ServiceHost的开启,而整个架构体系根据创建ServiceHost时初始化的用于描述服务的ServiceDescription对象来构建的。...与此类似,当我们开启ChannelFactory的时候,WCF会根据之前创建的ServiceEndpoint来构建客户端的运行时架构体系。...下图揭示了WCF客户端框架体系的大体结构。在该架构体系中,表示客户端运行时的ClientRuntime是其核心。...我们可以自定义参数检器实现针服务调用前对输入参数的验证,以及服务调用后对返回值和输出参数的验证。 WCF客户端运行时架构体系详解[上篇] WCF客户端运行时架构体系详解[下篇]
ServiceChannelProxy是WCF中的一个继承自RealProxy的类型,而其核心则是一个类型为ServiceChannel的对象。...当我们使用ChannelFactory创建一个服务代理的时候,WCF会根据代表客户端运行时的ClientRuntime创建一个ServiceChannel对象。...由于ServiceChannel同时引用着代表服务模型层核心的ClientRuntime和信道层的信道栈,所以我们可以说ServiceChannel是连接WCF客户端服务模型层与信道层之间的纽带。...当ServiceChannel被成功创建后,WCF会基于该对象创建ServiceChannelProxy对象。最然返回这个真实代理对象的透明代理。...WCF客户端运行时架构体系详解[上篇] WCF客户端运行时架构体系详解[下篇]
如果你阅读了《WCF技术剖析(卷1)》第5章《序列化与数据契约》,你应该很清楚WCF通过一个被称为消息格式化器(MessageFormatter)组件来完成序列化和反序列化工作。...举个例子,在《WCF技术剖析(卷1)》的第10章,我分别采用自定义ClientMessageInspector和CallContextInitializer实现了上下文信息从客户端到服务端的自动传播。...我们通常通过自定义ParameterInspector的方式实现操作执行前对输入参数的检验,以及操作执行后对返回值/输出参数的检验。...它提供了于WCF的集成,使我们可以将这些独立的验证策略通过声明或者配置的方式应用到相应的操作上,最终实现自动的参数验证。而最终完成验证的就是自定义的ParameterInspector。...WCF服务端运行时架构体系详解[上篇] WCF服务端运行时架构体系详解[中篇] WCF服务端运行时架构体系详解[下篇] WCF服务端运行时架构体系详解[续篇]
整个服务端运行时架构体系的核心,同时也是对WCF服务端服务模型进行扩展重点考虑的对象。...RoleProvider和在自定义安全主体权限模式下自定义的授权策略(通过ExternalAuthorizationPolicies属性表示)。...如果你阅读了《深入剖析授权在WCF中的实现[共14篇]》,相对对这四个对象不会感到陌生。 2、服务实例上下文 服务端框架对服务调用请求的处理最终必然体现在服务实例的创建和操作方法的调用。...但是你可以通过自定义一个被称为实例提供者的组件来让WCF服务端分发系统按照你希望的方式创建你想要的实例作为最终的服务实例。...服务端运行时架构体系详解[上篇] WCF服务端运行时架构体系详解[中篇] WCF服务端运行时架构体系详解[下篇] WCF服务端运行时架构体系详解[续篇]
WCF的服务端架构体系又可以成为服务寄宿端架构体系。我们知道,对于一个基于某种类型的服务进行寄宿只需要使用到一个唯一的对象,那就是ServiceHost。...当基于上面配置创建的ServiceHost在正常开启后,WCF会创建如下图所示的架构体系。...如果这6种消息筛选器依然不能满足你的需求,你可以通过继承MessageFilter这个抽象类创建你自定义的消息筛选器。...如果希望使用其他的值,可以通过自定义Behavior的形式覆盖掉默认的值。...服务端运行时架构体系详解[上篇] WCF服务端运行时架构体系详解[中篇] WCF服务端运行时架构体系详解[下篇] WCF服务端运行时架构体系详解[续篇]
您可以使用这些扩展点来实现各种自定义行为,包括消息或参数验证、消息日志记录、消息转换、自定义序列化/反序列化格式、输出缓存、对象共用、错误处理和授权等。...图 1 WCF 运行时体系结构 调度程序/代理扩展 调度程序和代理都提供了大量的扩展点,您可以在其中插入自己的代码;这些扩展常被称为侦听器,因为它们允许您侦听默认的运行时执行行为。...图 2 显示了客户端代理体系结构及可用的扩展点。代理的主要作用是将调用方提供的对象(参数)转换为 WCF 消息对象,然后将后者提供给底层通道堆栈进行网络传输。 ?...接着,代理使用序列化程序将提供的参数转换为 WCF 消息对象(图中步骤 2)。此时,您可以使用一个自定义的格式化程序对象来自定义序列化过程。...您的自定义调度程序/代理扩展可以使用这些集合存储(并查询)整个管道中用户定义的状态。 总结 WCF 提供了一个强大的扩展体系结构,可用于进行大量的运行时自定义。
在这篇文章中,我们对信道分发器本身作一个深入的了解,首先来看看它具有哪些可供扩展的组件,以及我们可以针对信道分发器对WCF实现哪些可能的扩展。...IChannelInitializer 2: { 3: void Initialize(IClientChannel channel); 4: } 从扩展性角度来讲,你可以将自定义的...你也可以自定义信道初始化器改变创建的信道状态。上述的关于信道分发器的结构可以简单地通过下图表示。 ?...信道分发器结构 为了实现自定义的异常处理和流量扩展等功能,你可以将自定义的相关组件应用到信道分发器中。另一方面,信道分发器本身具有一些用于控制器运行行为的属性。...服务端运行时架构体系详解[上篇] WCF服务端运行时架构体系详解[中篇] WCF服务端运行时架构体系详解[下篇] WCF服务端运行时架构体系详解[续篇]
WCF的承载既可以通过编码实现,也能够通过配置实现.而且使用配置,更有利于日后的维护和扩展。...然而WCF的配置上configSource是无效的,那么WCF如何自定义配置文件? WCF的ServiceHost和ChannelFactory分别提供了服务端和客户端的可扩展解决方案。...下面针对这两个对象分别说明如何自定义服务端和客户端的配置文件。...; } } } 2、WCF的客户端自定义配置文件,WCF可以通过两种方式构建代理,ClientBase和ChannelFactory,ClientBase最终也是通过ChannelFactory...来构建Channel的 ChannelFactory有两个方法为自定义配置文件提供解决方案: protected virtual void ApplyConfiguration(string
该协议体系可以解决如下两个问题:客户端对服务端的验证;通过对传输层传输的数据段进行加密确保消息的机密性。接下来通过一个例子,来描述连接HTTPS的过程。...之前介绍的主要是安全概念,接下来则在WCF中,安全的具体实践。...对于整个.NET体系来说,其用户和角色等信息都是通过身份Identity和安全主体Principal两个概念来表述的。...常见授权方式包括Windows用户组授权、ASP.NET Roles授权和自定义授权方式三种。...serviceAuthorization> 19 20 21 22 此外,还有自定义的授权方式
整个WCF事务还有一个重要的步骤需要实现:如何将通过OperationBehaviorAttribute特性标记为TransactionRequired的操作的执行自动纳入到流入的事务之中。...Transaction transaction, Message message); 5: public Transaction Transaction { get; } 6: } WCF...至于事务参与者之间的协调问题,已经不属于WCF体系管辖的范围了,DTC会接收余下的工作。 如果我们将上面的实现通过代码的形式写出来,相信读者的理解会更加深刻。...场景3: WCF客户端和服务端部属于不同的主机,将OleTxUpgradeEnabled设置为0的境况下,DTC之间采用WS-AT进行事务处理; 场景4:WCF客户端调用另一平台服务,DTC和服务所在主机的事务管理器...(TM:Transaction Manager)采用WS-AT进行事务处理;其他平台客户端调用WCF服务,DTC和TM之间也采用WS-AT进行事务处理。
那么,在WCF内部这三者之间究竟是如何通过相互协作实现分布式事务的呢?...关于绑定、绑定元素和信道之间的关系,在《WCF技术剖析(卷1)》的第3章有详细的介绍。...二、 事务绑定:实现事务的流转 由于消息交换是WCF进行通信的唯一手段,所以事务的流转最终需要将事务本身作为消息的一部分进行传输。...在WCF的整个事务处理体系结构中,事务的格式化和消息绑定的操作通过事务绑定实现。...事务体系内部创建了继承自TransactionFormatter的三个具体的TransactionFormatter类型:OleTxTransactionFormatter、WsatTransactionFormatter10
所以,WCF一方面需要允许让单个服务实例并发处理接收到的多个请求,同时也需要设置一道闸门控制并发的数量。WCF的流量限制(Throttling)体系为你创建了这道闸门。...[第2篇]并发中的同步--WCF并发体系的同步机制实现 在《WCF 并发的本质》中,我们谈到了WCF提供的三种不同的并发模式,使开发者可以根据具体的情况选择不同的并发处理的策略。...串行执行即同步执行,在WCF并发框架体系中,这样的同步机制是如何实现的呢?...同步上下文在WCF并发体系的内部是如何影响服务操作的执行的呢?这实际上涉及到WCF的一个话题,即线程的亲和性(Thread Affinity),下篇将为你剖析WCF线程亲和机制的本质。...[第7篇] 控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[上篇][下篇] WCF是一个基于多线程的消息监听、接收和处理框架体系,能够同时应付来自相同或者不同客户端的服务调用请求
领取专属 10元无门槛券
手把手带您无忧上云