自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(109)
  • 收藏
  • 关注

原创 关于CLR内存管理一些深层次的讨论[上篇]

<br /> <br />半年之前,PM让我在部门内部进行一次关于“内存泄露”的专题分享,我为此准备了一份PPT。今天无意中将其翻出来,觉得里面提到的关于CLR下关于内存管理部分的内存还有点意思。为此,今天按照PPT的内容写了一篇文章。本篇文章不会在讨论那些我们熟悉的话题,比如“值类型引用类型具有怎样的区别?”、“垃圾回收分为几个步骤?”、“Finalizer和Dispose有何不同”、等等,而是讨论一些不同的内容。整篇文章分上下两篇,上篇主要谈论的是“程序集(Assembly)和应用程序域(AppDoma

2010-10-18 22:15:00 746 2

原创 [转]T4 Code Generation

<br />[原文:http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx]Rob beat me to it. Blogging about T4 (the Text Template Transformation Toolkit) had been on my list literally for a year. He and I were

2010-10-17 17:15:00 467

原创 采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[扩展篇]

<br />关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则。这实际上涉及到对该“验证框架”的扩展,即如何自定义Validator和对应的ValidatorAttribute与ValidatorElementAttribute。为了让本系列看起来完整,通过《扩展篇》进行收尾。本篇我们写一个简单的Validator,用于验证字符串类型属性成员的长度是否符合要求(实际上我是直接借鉴了EnterLib中VAB

2010-10-15 20:15:00 472

原创 采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[改进篇]

<br />自《编程篇》和《设计篇》发布以来,收到了一些反馈。尤其是园友双鱼座提到.NET 3.5下的System.ComponentModel.DataAnnotations命名空间具有相似的实现,并且通过“表达式”的方式实现了CompositeValidator的服务逻辑判断的功能。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。为了让大家对此改进又一个深刻的认识,我们来对比之下对于同一个验证规则,改进前后有何不同。[源代码从这里下载]<

2010-10-14 20:13:00 413

原创 采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[设计篇]

<br />没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供CompositeValidator使复杂逻辑判断成为可能;提供多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。一、核心三人组:Validator、ValidatorAttribute和ValidationError<br />应该说整个验证框架的核心体系只包含如下三中类型:Validat

2010-10-13 21:11:00 399

原创 采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[编程篇]

<br />昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性(Custom Attribute)的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,《下篇》介绍背后的设计原理和具体实现。一、定义最简单的验证规则<br />我们先看看一个最简单的验证规则如何应用到对应的实体类型上。在这里我们模拟一个有趣的场景:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都

2010-10-12 16:12:00 296

原创 采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[上篇]

<br />昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性(Custom Attribute)的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,下面介绍背后的设计原理和具体实现。一、定义最简单的验证规则<br />我们先看看一个最简单的验证规则如何应用到对应的实体类型上。在这里我们模拟一个有趣的场景:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有

2010-10-12 16:11:00 330

原创 当InternalsVisibleToAttribute特性遭遇&quot;强签名&quot;

一、如何让Intenal成员暴露给另一个程序集<br />我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员。比如将一个Logging组件定义成三个程序集:Logging.dll、Logging.Client.dll和Logging.Server.dll。其中后两个分别用于客户端和服务端的日志记录,

2010-10-06 17:08:00 320

原创 如何解决EnterLib异常处理框架最大的局限&mdash;&mdash;基于异常&quot;类型&quot;的异常处理策略

<br />个人觉得EnterLib的EHAB(Exception Handling Application Block)是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,把就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义ExceptionHandler很好地解决了这个问题。一、EnterLib基于异常类型的异常处理策略<br />EnterLib的异常处理策略基本上可以通

2010-09-25 16:07:00 194

原创 EnterLib PIAB又一个BUG?[续]&mdash;&mdash;这是一个致命的BUG

<br />在《EnterLib PIAB又一个BUG?》这篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PolicyInjection的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出一个ResolutionFailedException异常。之后根据园友韦恩卑鄙的评论,又进行了后续的验证。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,

2010-09-22 13:07:00 192

原创 EnterLib PIAB又一个BUG?

<br />在《这是EnterLib PIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(Constructor Injection),而不能支持属性注入(Property Injection)和方法注入(Method Injection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br />对EnterLib 5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:18:00 272

原创 EnterLib PIAB又一个BUG?

<br />在《这是EnterLib PIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(Constructor Injection),而不能支持属性注入(Property Injection)和方法注入(Method Injection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br />对EnterLib 5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:17:00 274

原创 EnterLib PIAB又一个BUG?

<br />在《这是EnterLib PIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(Constructor Injection),而不能支持属性注入(Property Injection)和方法注入(Method Injection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br />对EnterLib 5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:07:00 186

原创 从数据到代码——通过代码生成机制实现强类型编程[下篇]

<br />在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换,即是将XML文件生成一个CodeCompileUnit对象,而该CodeCompileUnit对象反映出来的DOM层次和我们将会生成的代码文件向匹配。在下篇中,我们将实现整个代码生成系统的第二个步骤——通过VS的Custom Tool实现数据(保存消息条目的XML)向代码文件的自动转换。一、让MessageCodeGenerator继承BaseCodeGeneratorWithSite<br />在《上篇》我们创建了Mess

2010-09-18 02:06:00 209

原创 关于WCF的一个非常“无语”的BUG!

<br />这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET 3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。<br />创建自定义行为(服务行为、终结点行为、契约行为和操作行为)是对WCF进行扩展最为常用的形式。通过下面的代码,我们创建了一个自定义的服务行为,为了简单我们没有编写任何逻辑代码。 1:namespace

2010-09-16 20:06:00 190

原创 创建基于CodeDOM的代码生成器实现&ldquo;强类型&rdquo;编程[上篇]

<br />我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual Studio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的C#或者VB.NET代码;当我们编辑Resource文件的时候,相应的的后台代码也会自动生成;当我们通过添加Web Reference调用Web Service或者WCF Service的时候,VS会自动生成服务代理的代码和相应的配置。总的来说

2010-09-16 00:06:00 191

原创 从数据到代码——通过代码生成机制实现强类型编程[上篇]

<br />我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过Visual Studio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的C#或者VB.NET代码;当我们编辑Resource文件的时候,相应的的后台代码也会自动生成;当我们通过添加Web Reference调用Web Service或者WCF Service的时候,VS会自动生成服务代理的代码和相应的配置。总的来说

2010-09-16 00:06:00 207

原创 这是EnterLib PIAB的BUG吗?

<br />在默认的情况下,EnterLib的PIAB采用基于TransparentProxy/RealProxy的机制实现对方法调用的拦截,进而实现了对横切关注点(Crosscutting Concern)的动态注入。也正是其来截机制本身的局限,当我们才用PIAB的方式进行对象的创建的时候,要求本创建对象的类型要么实现某一个接口,要么继承MarshalByRefObject类型。但是当我们让抽象基类继承自MarshalByRefObject就不行了,我个人觉得这是微软需要改进的地方。一、基于接口实现和对M

2010-09-15 12:06:00 216

原创 人生观、世界观?!

<br />这是一个大得能把牛吓死的话题。上周公司为我们进行企业核心价值(Core Value)的培训,让我们每人写出3条个人价值观。对于这个问题,我之前还真没有人证思考过——到底我的人生信条是什么呢?想了半天,写出了以下三条:一、正直<br />我经常说一句话:“当今中国是一个无法无天的社会”。<br />天,上天,神也。中国没有宗教,中国人不敬鬼神,俨然一个“大无畏”的民族。但是,一旦没有了敬畏,人就会变得没有了底线,这是一件很可怕的事情。<br />法,法理,制度也。中国虽然号称“法制社会”,但是很多

2010-09-13 19:06:00 251

原创 我美丽的家乡——洪雅[转]

<br />洪雅于隋开皇十三年(公元593年)建县,距今已有1400多年历史,地处四川盆地西南边缘,东接夹江县、峨眉山市,南抵汉源县、金口河区,西邻雅安雨城区、荥经县,北连名山县、丹棱县,距成都116公里、乐山55公里、眉山50公里、雅安62公里。全县幅员面积1896.49平方公里,辖15乡镇142村1048社14社区,总人口34.67万。属中亚热带湿润气候,年降雨量1435.5毫米,年日照1006.1小时,年无霜期312天,年平均气温16.6℃。地形由西南向东北呈高低梯次变化,素有“七山二水一分田”之称。

2010-09-12 14:06:00 202

原创 当你的博客文章的作者变成“编辑整理”,你作何感想?

<br />我在狠多场合都说过:在很大程度我将我的博客当成是一个备忘录。在很多情况下需要使用到某些东西,我会想起我曾经写过相关的文章,于是我会在Google上输入Artech和相关关键字查找我的文章。我发现基本上我的每篇文章都会被很多网站转载,有的会署名Artech,但是很多的作者会写上佚名之类的。<br />对于这些我也习以为常了,也坦然接受。但是今天发现一个叫做“学IT网”的站点(http://www.xueit.com/),里面转载了博客园几乎所有的技术文章,但是除了表明文章来源于博客园之外,所有文章

2010-09-11 20:06:00 156

原创 Visual Studio对程序集签名时一个很不好用的地方

<br />由于我们的项目底层使用到一个通过LogicalCallContext实现的上下文数据管理框架,导致所有的Unit Test不能正常运行。具体的现象在《只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题》有过详细的介绍。解决的方案就是对相关的程序集进行强签名,并加到GAC中,是Unit Test能够识别基于LogicalCallContext项目的类型。有了Visual Studio这个强大的IDE,程序集的签名工作很好实现——仅仅需要在Project

2010-09-10 23:06:00 217

原创 让云触手可及——微软云计算解决方案白皮书

<br />2010 年 3 月 5 日,微软全球 CEO 史蒂夫.鲍尔默先生在美国华盛顿大学发表演讲时指出,微软将举全公司之力投入云计算。“我们将把赌注押在云计算领域。”——他表示,此次演讲旨在让人们从更广阔的角度来看待云计算,并由多个维度来了解云计算所带来的变革。<br /> 和业内许多公司一样,微软认为云技术的革新攸关未来,从 5 个维度分享了微软对云计算的理解以及微软在相关领域的创新情况。<br />首先,云计算肯定会创造新的机遇,但同时也让我们承担着比以往任何时候都更重大的责任。机遇来自于前所未有

2010-09-10 09:06:00 170

原创 如何解决分布式系统中的跨时区问题[实例篇]

<br />关于如何解决分布式系统中的跨时区问题,上一篇详细介绍了解决方案的实现原理,在这一篇中我们通过一个完整的例子来对这个问题进行深入探讨。尽管《原理篇》中介绍了那么多,解决方案的本质就是:在进行服务调用过程中将客户端的时区信息作为上下文传入服务端,并以此作为时间转换的依据。我们首先定一个具体的类型来定义包含时区信息的上下文类型,我们将这个类型起名为ApplicationContext。一、通过CallContext实现ApplicationContext<br />在《通过WCF扩展实现Context

2010-09-10 00:06:00 205

原创 如何解决分布式系统中的跨时区问题[原理篇]

<br />《谈谈你最熟悉的System.DateTime[上篇][下篇]》从跨时区的角度对DateTime这个我们熟知的类型进行了深入探讨,它们都是为这篇文章作的准备工作。在接下来的两篇文章中,我们将完整的介绍如果在一个分布式系统中处理时区的问题。一、场景以及需求<br /> 为了让大家本文介绍的主题有一个比较直观的认识,我们给出一个具体的应用场景。一个跨国公司开发一套统一的办公系统,供遍布全球的所有分公司使用。客户端的UI采用Smart Client (Windows Forms应用),而主要的业务逻辑

2010-09-08 23:06:00 123

原创 谈谈你最熟悉的System.DateTime[下篇]

<br />在《谈谈你最熟悉的System.DateTime》一文中,我们从跨时区的角度剖析了我们熟悉的System.DateTime类型。如果你还是采用传统的ADO.NET编程方式,并使用DataSet作为数据实体,可能你会熟悉System.Data.DataSetDateTime这么一个类型。这个类型也是为实现跨时区场景下对时间处理而设计的,为了对前文的补充,这篇文章就来谈谈基于DataSet的时间处理问题。一、你是否关注过DataColumn的DateTimeMode属性<br />在ADO.NET编

2010-09-05 11:06:00 134

原创 谈谈你最熟悉的System.DateTime[上篇]

<br />最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是如何有效地进行时间的处理以提供对跨时区的支持。对于一个分布式的应用来说,倘若客户端和服务端部署与不同的地区,在对时间进行处理的时候,就需要考虑时区的问题。以我们现在的一个项目为例,这是一个为澳大利亚某机构开发的一个基于Smart Client应用(Windows Form客户端),服务器部署于墨尔本,应用的最终用户可能需要跨越不同的州。澳洲地广人稀,不同的州也有可能会跨越不同的时区。假设数据库并不支持

2010-09-04 10:06:00 124

原创 IoC+AOP的简单实现

<br />对EnterLib有所了解的人应该知道,其中有一个名叫Policy Injection的AOP框架;而整个EnterLib完全建立在另一个叫作Unity的底层框架之上,我们可以将Unity看成是一个IoC的框架。对于一个企业应用来说说,AOP和IoC是我们进行逻辑分离和降低耦合度最主要的方式,而将两者结合起来具有重要的现实意义。一、基于IoC+AOP的编程<br />到底将IoC和AOP进行整合后,会对编程但来怎样的影响,我写了一个简单的例子(你可以从这里下载该实例)。假设我现在有两个模块,分别

2010-09-01 20:06:00 185

原创 一个关于解决序列化问题的编程技巧

<br />在前一篇文章中我曾经说过,现在正在做一个小小的框架以实现采用统一的API实现对上下文(Context)信息的统一管理。这个框架同时支持Web和GUI应用,并支持跨线程传递和跨域传递(这里指在WCF服务调用中实现客户端到服务端隐式传递),以及对上下文项目(ContextItem)的读写控制。关键就在于后面两个特性的支持上面,出现一个小小的关于序列化的问题。解决方案只需要改动短短的一行代码,结果却让我折腾了老半天。一、问题重现<br />为了重现我实际遇到的问题,我特意将问题简化,为此我写了一个简单

2010-08-31 20:06:00 175

原创 只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题

<br />最近一直在进行公司内部框架的升级工作,其中一个小的部分就是通过HttpSessionState和CallContext建立一套统一的、可扩展的用于管理上下文信息的框架。在为写好的程序编写Unit Test和QuickStart的时候,遇到了两个基于LogicalCallContext的严重问题。导致这两个问题的根源还没有来得及去追踪,或许是微软VS  Unit Test框架本身和WebHost本身的一个Bug。现在将其写出来,一来是希望读者在遇到相同情况的时候知道LogicalCallConte

2010-08-29 00:05:00 180

原创 Unity.Interception System (2.0)

<br />

2010-08-27 12:04:00 203

原创 上班路上&hellip;

<br /> 自从公司搬到国际科技园五期之后,就开始坐班车上班了。随着入住公司越来越多,班车的车次却始终保持不变,所以班车变得越来越挤。对于上下班的高峰期,后面几个站点的人根本就上不了车。<br />为了避开高峰期,我一般都会选择坐稍早那一班上下班。由于这几天一直在培训公司刚刚招聘的新人,培训在九点开始,去早了也没有太大的意义,所以选择坐上班高峰期的那班车。<br />虽然我在始发站上车,但在我上车的时候已经没有座位了,不过还好,车上还有一定的空间供我们呼吸。两站之后,已经挤满了整整一车的人,每次关车门都需

2010-08-25 22:04:00 202

原创 如何让普通变量也支持事务回滚?

<br />有一次和人谈起关于事务的话题,谈到怎样的资源才能事务型资源。除了我们经常使用的数据库、消息队列、事务型文件系统(TxF)以及事务性注册表(TxR)等,还有那些资源直接可以纳入事务进行状态的管理呢?我说如果我们按照.NET事务模型的规范对相应的资源进行合理的封装,原则上我们可以让任何可编程的资源成为事务型资源。本篇文章中,我将通过简单的编程将一个普通的变量变成支持事务,让变量的值也可以回滚,以确保事务前后的数据一致性。一、什么是事务型的变量<br />本文中所说的事务型变量指的是这样的变量:在事务

2010-08-16 22:05:00 443

原创 年纪大了,却越来越激愤了

<br />照理说随着年纪的增加,一个人的情绪控制能力会随之增强。随着阅历的增加,心智的增强,会帮助一个更加“从容”地面对顺境与逆境——我一直觉得人生的最高境界就是“从容”二字)。同时也会使一个人能够一种包容的心态去看待和处理生活中一些“看不惯”的事情,而不会使这些影响自己的情绪。但是,我觉得自己年纪越大,却越来越激愤。每次看到一些不公、丑陋、恶心的事情,自己总是难以忍受,习惯性地表现出一些“过激”的行为。以下随便列举出一些事件:事件一<br />自从公司搬家之后,我都是做班车上下班。为了照顾更多的人,班车

2010-08-14 23:05:00 623

原创 基于CallContextInitializer的WCF扩展导致的严重问题

<br />WCF是一个具有极高扩展度的分布式通信框架,无论是在信道层(Channel Layer)还是服务模型层(Service Model),我们都可以自定义相关组件通过相应的扩展注入到WCF运行环境中。在WCF众多可扩展点中,ICallContextInitializer可以帮助我们在服务操作执行前后完成一些额外的功能,这实际上就是一种AOP的实现方式。比如在《通过WCF Extension实现Localization》中,我通过ICallContextInitializer确保了服务操作具有和客户端

2010-07-27 12:13:00 1379 2

原创 你知道Unity IoC Container是如何创建对象的吗?

<br />Unity是微软P&P推出的一个开源的IoC框架,最新的官方版本是2.0。Unity之前的版本建立在一个称为ObjectBuild的组件上,熟悉EnterLib的读者,相信对ObjectBuild不会感到陌生。对于EnterLib 5.0之前的版本,ObjectBuild可以说是所有Application Block的基石。ObjectBuild提供一种扩展、可定制的对象创建方式,虽然微软官方没有将ObjectBuild和IoC联系在一起,其本质可以看成是一个IoC框架。在Unity 2.0中,

2010-07-13 22:10:00 1458

原创 也谈事件(Event)

<br />最近园子里发表了一些讨论“事件(Event)”的文章,我也来凑个热闹,谈谈我对事件的一些粗浅的认识。本文不谈设计模式(观察者模式),只从运行时的角度来分析事件这个对象到底是个什么东西,它有那么神秘吗?为了更好的分析事件,本文将会编写一些例子来模拟事件的订阅机制。本文对事件的分析可以概括为下面三句话:事件本质上是一个MulticastDelegate对象; MulticastDelegate对象是多个Delegate对象的链表; Delegate = Object + MethodInfo,委托的

2010-07-10 13:12:00 393

原创 WCF传输安全(Transfer Security)的基本概念和原理:认证(Authentication)[上篇]

<br />对于任何一个企业级应用来说,安全(Security)都是一个不可回避的话题。如何识别用户的身份?如何将用户可执行的操作和可访问的资源限制在其允许的权限范围之内?如何记录用户行为,让相应的操作都有据可查?这些都是应用的安全机制或者安全框架需要考虑的典型问题,它们分别对应着三个安全行为:认证(Authentication)、授权(Authorization)和审核(Auditing)。 <br />除了这些典型的安全问题,对于一个以消息作为通信手段的分布式应用,还需要考虑消息的保护(Message

2010-07-07 00:13:00 3375 3

原创 [转自MSDN]可靠会话(Reliable Session)的最佳实践

一、设置 MaxTransferWindowSize<br />Windows Communication Foundation (WCF) 中的可靠会话使用传输窗口保存客户端和服务上的消息。可配置属性 MaxTransferWindowSize 指示传输窗口可以保存多少条消息。<br />在发送方,这指示在等待确认消息时传输窗口可以保存多少条消息,在接收方,则指示为服务缓冲多少条消息。<br />选择合适的大小可影响使用网络的效率以及运行服务的最佳容量。以下各节将详细介绍选择此属性的值时要考虑的事宜以及值

2010-06-30 22:07:00 464

原创 使命必达: 深入剖析WCF的可靠会话[共8篇]

作为一个通信基础平台,WCF必须保证通信的可靠性。由于消息交换是WCF采用的通信手段,通信可靠性的保障体现在确保消息的可靠传输。WCF本质上是一个消息处理框架,作为整个消息交换系统的两个终端,即发送端和接收端。换句话说,WCF仅仅负责对消息的发送和接收,一旦消息通过WCF的信道层进入了网络,就脱离了WCF的控制范围。但是,由于网络环境的限制,网络层不能百分之百地确保对消息的有效交付。如何

2010-05-13 21:07:00 1171 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除