WCF授权-Identity与Principal[上篇]
WCF授权-Identity与Principal[下篇]
WCF授权-WCF中的三种授权方式
基于Windows用户组的授权方式[上篇]
基于Windows用户组的授权方式[下篇]
模拟(Impersonation)与委托(Delegation)
模拟在WCF中的应用
ASP.NET Roles授权[上篇]
ASP.NET Roles授权[下篇]
通过扩展自行实现服务授权[提供源码下载]
前面的两篇文章(《WCF授权-Identity与Principal[上篇]》和《WCF授权-Identity与Principal[下篇]》) 主要探讨基于安全主体的授权。通过这些介绍我们知道:如果我们在实施授权的时候,当前线程的安全主体能够被正确设置,我们就可以正确地完成授权。基于相同 的原理,对于WCF的服务授权,如果正确的安全主体能够在服务操作被执行之前被正确设置到当前线程,借助于这个安全主体,我们不但可以采用命令式编程的方 式将授权逻辑写在相应的操作中,也可以采用声明式编程的方式将授权策略定义在应用在服务操作方法上的PrincipalPermissionAttribute特性中。
安 全主体具有两个基本的要素:身份与权限。身份在客户端经过认证之后已经确立下来,现在需要解决的问题就是如何获取被认证用户的权限。为了解决这个问 题,WCF为我们提供了不...
WCF中安全主体(Principal)是整个授权机制的核心。可以简单地将安全主体定义成能够被成功实施授权的主体。一个安全主体具有两个基本的要素:基于某个用户的安全身份和该用户具有的权限。绝大部分的授权都是围绕着“角 色”进行的,我们将一组相关的权限集和一个角色绑定,然后分配给某个用户。所以在基于角色授权环境下,我们可以简单地将安全主体表示成:身份 + 角色。在.NET基于安全的应用编程接口中,通过IPrincipal接口表示安全主体。
用以表示安全主体的IPrincipal接口定义在System.Security.Principal命名空间下。IPrincipal的定义体现在如下 的代码片断中,从中我们可以看出IPrincipal仅仅具有两个成员。只读属性Identity表示安全主体的身份,而IsInRole用以判断安全主 体对应...
在安全领域,认证和授权是两个重要的主题。认证是安全体系的第一道屏障,守护着整个应用 或者服务的第一道大门。当访问者叩门请求进入的时候,认证体系通过验证对方提供凭证确定其真实身份。作为看门人的认证体系,只有在证实了访问者的真实身份 的情况下才会为其打开城门,否则将之举之门外。
当访问者入门之后,并不意味着它可以为所欲为。为了让适合的人干适合的事,就需要授权机 制为具体的人设置具体的权限,并根据这些权限设置决定试图调用的操作或者访问的资源对该访问者是否是安全的。对于一个安全保障体系来说,授权是目的。但是 授权的执行是假定已经通过认证体现确定了访问者真实身份,因为用于进行授权采用的权限集是基于真个确定的身份的。在真正进入对WCF授权的具体介绍之前, 我们有必要来了解一下这个“身份”的问题。
在.NET的安全应用编程接口中,身份...
jpg图片在IE浏览器中无法显示,只显示一个红x图片,用系统自带的Windows图片传真查看器可以打开,Firefox等w3c浏览器也能打开这张jpg图片。

出现这个问题是因为jpg图片在保存的时候图像模式选择了CMYK颜色,只需要将图像模式修改为RGB颜色然后保存覆盖原来的图片,就可以在在IE浏览器下显示了,可能是IE浏览器只能识别RGB颜色的图片格式。


服务(Service)的本质就是提供服务消费者期望的某种功能,服务的价值体现在两个 方面:服务本身的质量和寄宿服务的平台应付消费者的数量,并发(Concurrency)的关注的是第二个要素。WCF服务寄宿于资源有限的环境中,要实 现服务效用的最大化,需要考虑如何利用现有的资源实现最大的吞吐量(Throughput)。提高吞吐量就某个寄宿的服务实例(Service Instance)来说,一个重要的途径就是让它能够同时处理来自各个客户端(服务代理)的并发访问。WCF实现了一套完整的并发控制体系,为你提供了不 同的并发模式。
我经常说软件架构是一门权衡的艺术,需要综合考虑各种相互矛盾的因素,找到一种最优的组合方式。提高单个服务实例允许的 并发访问量能够提高整体吞吐量,这样的理论依赖于一种假设,那就是服务端所能使用的资源是无限。我们知道,这种假设无论在什么情况下都不会成...
通过《WCF利用限流(Throttling)控制并发访问[上篇]》 介绍,我们知道了如何通过编程和配置的方式设置相应的最大并发量,从而指导WCF的限流体系按照你设定的值对并发的服务调用请求进行限流控制。那么,在 WCF框架体系内部,整个过程是如何实现的呢?这就是本篇文章需要为你讲述的内容。实际上,整个限流控制体系,主要涉及到两个对象:信道分发器(ChannelDispatcher)和ServiceThrottle。
从服务端整个消息监听、接收、分发和处理框架体系角度来讲,限流控制现在在信道分发器上。关于信道分发器在整个WCF服务端框架体系中所处的位置,由于在《WCF技术剖析(卷1)》的第2章和第7章均有过详细的介绍,在这里我只作一些概括性的介绍。
在服务寄宿的时候...
WCF是一个基于多线程的消息监听、接收和处理框架体系,能够同时应付来自相同或者不同 客户端的服务调用请求,并提供完善的同步机制确保状态的一致性。一方面,我们期望WCF服务端能够处理尽可能多的并发请求,但是资源的有限性决定了并发量 有一个最大值。如果WCF不控制进入消息处理系统的并发量,试图处理所有抵达的并发请求,一旦超过了这个临界值,整个服务端将会由于资源耗尽而崩溃。
所以,我们需要在WCF的消息接收系统和消息处理系统之间设置一道道屏障,将流入消息处理系统的请求控制到一个最佳的范围,以实现对现有资源的有效利用,从 而达到确保服务的可用性和提高整体吞吐量的目的。WCF的流向限制(Throttling)为你设置了这些屏障,你可以根据现有的软硬件环境对该闸门准入 的并发流量进行动态的配置。我们先来看看如何进行限流控制。
WCF对...
在《ConcurrencyMode.Multiple模式下的WCF服务同步上下文对并发的影响[上篇]》 中,我通过一个具体的实例演示了WCF服务宿主的同步上下文对并发的影响,并简单地介绍了同步上下文是什么东东,以及同步上下文在多线程中的应用。那么, 同步上下文在WCF并发体系的内部是如何影响服务操作的执行的呢?这实际上涉及到WCF的一个话题,即线程的亲和性(Thread Affinity),本篇文章将为你剖析WCF线程亲和机制的本质。
对于服务端来说,WCF消息监听和接收体系通过IO线程池并发的处理来自客户端的服务调用请求,所以并发抵达的服务调用请求消息能够得到及时的处理。但是,服务操作具体在那个线程线程执行,则是通过WCF的并发处理体系决定的。
在默认的情况下,WCF采用这样的机制控制并...
对于正常的服务调用,从客户端发送到服务端的请求消息最终会被WCF服务运行时分发到相 应的封装了服务实例的InstanceContext上。而在回调场景中,我们同样将回调对象封装到InstanceContext对象,并将其封送到客 户端。当服务操作过程中执行回调操作的时候,回调消息最终也是分发到位于客户端封装回调对象的InstanceContext。从消息分发与并发处理的机 制来看,这两种请求并没有本质的不同。接下来,我们通过《创建一个监控程序探测WCF的并发处理机制》中的实例,综合分析WCF对并发服务调用和并发回调的处理机制。
为此,我们需要对我们上面给出的监控程序进行相应的修改。首先需要修改的是服务契约ICalculator。服务契约ICalculator的Add操作接 受传入的操作数并以返回值得形式返回到客户端。现在我们通...
在《WCF服务在不同实例上下文模式下具有怎样的并发表现》中,我们通过实例演示的方式讲述了基于不同实例上下文模式的并发行为。对于这个实例中的服务类型CalculatorService,读者应该还记得我们对它进行了特别的定义:通过ServiceBehaviorAttribute特性将属性将UseSynchronizationContext设 置成False。至于为何要这么做,这就是本篇文章需要为你讲述的内容。为了让读者对本节介绍的内容有一个深刻的认识,我们不然去掉 ServiceBehaviorAttribute特性的UseSynchronizationContext,看看最终会表现出怎样的并发行为。
现在,我们对监控程序实例中的Calcula...
C#如何标记类里面的方法或者类为否决的,不可使用。在VS IDE编辑器中使用此方法或者类时会用绿色的波浪线标记这个语句,当移动鼠标到这句代码上时,会出现[否决的]方法名,警告“方法名称”已过时:xxx。。。的提示信息。
此效果是使用C#的Obsolete属性实现的,这个在升级类库的方法的时候,如果改动了方法名称或者移动到了别的类或者空间下时,可以使用Obsolete属性标记原方法为否决过时的,这样使用原始方法或者类时会出现IDE提示,或编译为dll时会出现警告信息。
测试代码如下
[Obsolete("类已经停用,此类下的方法已经移动到Tool类下面")]
public class Test
{
[Obsolete("方法已经停用,此方法已经移动到Tool类下面")]
/// <summary>
/// 判断字符串不为空
///...由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的,所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅《WCF技术剖析(卷1)》第9章。
在《创建一个监控程序探测WCF的并发处理机制》 一文中,我写一个了简单的WCF应用,通过这个应用我们可以很清楚了监控客户端和服务操作的执行情况下。借此,我们可以和直观地看到服务端对于并发的服务 调用请求,到底采用的是并行还是串行的执行方式。接下来,我们将充分地利用这个监控程序,以实例演示加原理分析相结合的方式对不同实例上下文模式下的并发 实现机制进行深度剖析。
由于WCF的并发是针对某个封装了服务实例的Instan...
由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的(参考《WCF并发本质》《WCF并发同步机制》),所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制,如果对WCF实例上下文模式和实例上下文提供机制不了解的话,请参阅《WCF技术剖析(卷1)》第9章。
为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执行时间,比如 客户端服务调用的开始和结束时间,服务操作开始执行和结束执行的时间等等。读者可以根据实时输出的监控信息,对WCF的并发处理情况有一个很直观的认识。 [源代码从这里下载]
本实例依然采用我们熟悉的四层结构,即契约、服务、寄宿和客户端。为了以可...
在《WCF并发本质》 中,我们谈到了WCF提供的三种不同的并发模式,使开发者可以根据具体的情况选择不同的并发处理的策略。对于这三种并发模式,Multiple采用的并行 的执行方式,而Single和Reentrant则是采用串行的执行方式。串行执行即同步执行,在WCF并发框架体系中,这样的同步机制是如何实现的呢?
实际上,WCF并发框架体系下针对Concurrency.Single模式的实现非常简单,其本质就是对InstanceContext进行加锁。如果采用反编译工具查看InstanceContext的定义,你会发现InstanceContext类中定义了一个类型为System.Object名为ThisLock的内部属性,而该属性实际上就是对基类CommunicationObject同名属性的引用,...
服务(Service)的本质就是提供服务消费者期望的某种功能,服务的价值体现在两个方面:服务本身的质量和寄宿服务的平台应付消费者的数量,并 发(Concurrency)的关注的是第二个要素。WCF服务寄宿于资源有限的环境中,要实现服务效用的最大化,需要考虑如何利用现有的资源实现最大的 吞吐量(Throughput)。提高吞吐量就某个寄宿的服务实例(Service Instance)来说,一个重要的途径就是让它能够同时处理来自各个客户端(服务代理)的并发访问。WCF实现了一套完整的并发控制体系,为你提供了不 同的并发模式。
我经常说软件架构是一门权衡的艺术,需要综合考虑各种相互矛盾的因素,找到一种最优的组合方式。提高单个服务实例允许的 并发访问量能够提高整体吞吐量,这样的理论依赖于一种假设,那就是服务端所能使用的资源是无限。我们知道,这种假设无论在什么情况下都不会成立。如果我...
很多时候为了矢量图而烦恼,为了省时间加速度,现在介绍一种ai位图转换成矢量图的简单实用方法,很受用哦~~
ai位图转为矢量图
1、在ai软件里面打开ai文件
2、另存为--文件名重命--存“AI格式”
3、出现"选项"--“版本”--“日文AI格式”


4、把“日文格式AI”导入CDRX4(一定要X4版本)打开就可以是矢量图了。。
这里说明一下,有些文件导入CDR之后会丢失,或者背景色会变成线条,至于背景色之类可以自己重新调整。。。
Excel表格导入cdr的方法和处理技巧,有时候排版就是为了这些表格而头痛,几个表格搞半天。。。。
1、现在我们要把MS EXCEL表格弄到CD中去,直接拷贝所需要的区域;
2、 在CD中建议开一个新文件,然后“选择性粘贴”刚才的内容:

3、建议去除所有的文字属性,便于下一步的操作;




...
asp.net可以通过useragent来判断是否搜索引擎来访问网站,因为不同的搜索引擎有不同的useragent信息,具体参考 搜索引擎useragent列表
下面为C#版本的源代码
/// <summary>
/// 判断是否为搜索引擎访问
/// </summary>
/// <param name="useragent"></param>
/// <returns></returns>
public bool IsSearchEngine(string useragent)
{
bool engine = false;
if (!string.IsNullOrEmpty(useragent))
{
System.Text.Regu...
本jquery插件主要使用了flash的功能,来实现大图片的加载,并实时返回加载图片的进度。从以前写的一个纯JS代码改动而来,As+lightbox+js实现实时加载图片进度
本插件同时使用了jquery浮动层拖动插件。Flash源代码点击这里下载
JavaScript和flash之间相互调用方法的相关总结
JavaScript调用flash.external.ExternalInterface.addCallback注册的函数在不同浏览器下的分析
JavaScript获取执行flash中flash.external.ExternalInterface.addCallback注册的函数
firefox NPMethod called on non-NPObject wrapped JSObject!错误
下面为jquery+flash显示图片实时加...