06 2014 档案
摘要:通常,使用有名互斥体(named mutex).但是该方案有以下的缺陷互斥体的名称有被其他应用程序使用的较小,潜在风险.此时,该方案不再有效,并且很难检测到bug.该方案无法实现允许一个应用程序产生N个实例这样的一般问题.使用Process类. 1 /// 2 //...
阅读全文
摘要:为什么需要依赖注入?ServiceUser是组件,在编写者之外的环境内被使用,且使用者不能改变其源代码.ServiceProvider是服务,其类似于ServiceUser,都要被其他应用使用,不同是ServiceProvider会被用于非本地环境,需要对应不同环境.普通的ServiceUser来负...
阅读全文
摘要:本文是翻译MVP: Model-View-Presenter The Taligent Programming Model for C++ and Java(Mike Potel)文章的摘要.该文介绍了从MVC到MVP的思想演化过程.SmallTalk编程模型在该项目中,使用了MVC来实现GUI(...
阅读全文
摘要:AV(Autonomous View)自治视图在面向终端用户的应用中,都需要一个可视化的UI来与用户交互.这个UI称为View视图.在早期,我们习惯将所有前台的逻辑,与视图揉在一起,称为AV自治视图.这些逻辑包括:数据呈现(Display),用户动作的扑捉与响应,数据存储等.在.Net的Winfor...
阅读全文
摘要:参数适配使用场景:当无法对一个参数的类型使用接口提取,或者该参数难以被"伪装"时.例如,该参数的类型是一个含有很多方法的接口类型.在进行单元测试时必须编写一个实现该接口的实现类.可以使用Mock.问题:从维护的角度来看,传递了一个宽接口,而其实方法内部只使用了该接口的部分契约.所以,应该尽量使用窄接...
阅读全文
摘要:单元测试面临的困难职责不明确类或者方法的职责不明确,违反了SRP原则.类/方法如果处理了本不该它处理的逻辑,会造成单元测试需要关心过多的外部关联类.静态方法静态方法使得调用者直接面对实际的服务类,难以通过其它方式替代其实现,也难以扩展.直接访问对象实例调用者直接实例化服务对象,从而使用服务对象提供的...
阅读全文
摘要:为什么需要Mock.真实对象具有不确定的行为.所以会产生不可预测的结果.真实对象很难被创建.真实对象的某些行为很难被触发(如网络错误).真实对象令程序的运行速度很慢.真实对象有(或者是)用户界面.测试需要询问真实对象它是如何被调用的.真实对象实际上并不存在.例如其它小组开发的模块.使用Mock的3个...
阅读全文
摘要:Right-BICEPRight首先,我们需要知道什么是正确的.这是最基本的.Boundary边界是否所有的边界条件都正确?CorrectConformance一致性结果值是否和期望值一致.Ordering顺序性值是否跟期望一样,是有序/无序的.Range区间性值是否位于合理的最大值和最小值之间.R...
阅读全文
摘要:HTTP本身是无状态的.这符合HTTP协议设计的目的.客户端只是简单地向服务器请求某种资源.两者都没有必须记录彼此过去的行为,每一次请求之间都是独立的.为了保存状态.在客户端使用Cookie,在Server端使用Session.同时,服务器端状态保存方案在客户端也需要保存一个标识.所以,Sessio...
阅读全文
摘要:触发器的作用触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的。用以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发.什么是存储过程?用什么来调用?存储过程是...
阅读全文
摘要:Win实际上将CLR作为一个COM服务器实现在一个DLL内,即为CLR定义了标准的COM接口,并为该接口和COM服务器分配一GUID,安装FrameWork时表示CLR的COM服务器被注册到注册表内.任何Win APP都可以寄宿CLR.一个PC可安装多个版本的CLR,但是只有一个版本(最新版本)的M...
阅读全文
摘要:当某线程触发GC时,任何线程不能再访问任何的对象.在GC执行时,可能会修改对象的地址.GC执行时,大多使用劫持法,将所有的线程挂起.对于含有Loop,且Loop内不再调用其它方法时.会生成一个编译时表.当线程的指针指令执行到该处时,会认为到达了一个安全点,线程可以被挂起.对于其它方法,GC会劫持线程...
阅读全文
摘要:执行异步操作CLR使用了WIN的线程处理能力,但保留了与其分离的权利.某些时候CLR的线程与Win的线程不是完全的匹配.线程的系统开销较大,应限制其数量.创建:分配并初始化一线程内核对象,保留1M的地址空间(用户模式),12KB的堆栈(内核模式),然后调用DLL函数通知进程中所有DLL操作来通知所有...
阅读全文
摘要:经过编译后,程序变为托管模块(=IL+元数据(描述数据信息)).托管模块需要CLR才能运行.然后,将若干个托管模块合并成Assembly.若干个文件/资源的逻辑分组.最小的可重用控制单元.其含有清单来描述其含有的文件集.所以具有自描述性.加载CLR:在\System32下有MSCoreEE.dll说...
阅读全文
摘要:自动属性.之前定义属性的步骤: private filed + public property.现在的形式:int id{get;set;}.可以分别设置get/set的保护级别(protected/public/private/internal).系统自动生成一个private的字段,并暴露响应的...
阅读全文
摘要:IIS 5.X中的ASP.NET实现了Web Server和ASP.NET App的分离.IIS作为Web Server运行在InetInfo.exe进程上.该进程是非托管的本地进程.ASP.NET App运行在aspnet_wp的Worker进程上.该进程初始化时会加载CLR,所以是一个托管进程....
阅读全文
摘要:最近在总结项目的自动测试相关的技术和知识点.我们项目的自动测试,能够在进行功能测试的同时,一并记录各个功能的CPU和Memory占用情况.此篇博文介绍了我们做的性能监控的程序和涉及到的技术.这里,就做一个简易版的性能监控工具.首先,上图.从运行程序上看,用户需要输入被监控的机器名,进程名,是否监控C...
阅读全文
摘要:服务契约的方法重载,会在装载宿主时,抛出异常.解决是在操作契约上Name设置为不同值,但是生成的代理会把Name的名称作为方法的名称,不过我们可以手动的修改代理类,使得方法名与服务声明的名称一样.契约的继承: 服务契约是不可继承的. 客户端在导入服务契约时,会取消服务契约的继承层级,并利用Opera...
阅读全文
摘要:从抽象层面看,WCF能够托管CLR类型(接口和类)并将它们公开为服务,也能够以本地CLR接口和类的方式使用服务。然而,CLR类型却属于.NET的特定技术。由于面向服务的一个核心原则就是在跨越服务边界时,服务不能够暴露它们的实现技术。因此,不管客户端采用了何种技术,它都能够与服务交互。使用基于XML的...
阅读全文
摘要:服务元数据是用来获得服务的EndPoint的信息,也就是它的ABC.服务有两种方案可以发布自己的元数据。一种是基于HTTP-GET协议提供元数据;一种是元数据交换方式,它往往使用一个专门的终结点,称之为元数据交换终结点。元数据交换终结点与其它终结点相似,仍然包含了地址、绑定与契约,但是使用的服务契约...
阅读全文
摘要:传输安全.点对点,对整个消息进行加密,性能损失,当中间者不安全时,消息也就不安全了. WCF中支持传输安全和消息安全模式。通过配置和绑定来设置。.消息安全.对消息的最终接受者保证安全,即使中间者不安全,消息不受影响,可选择对部分消息进行加密.数据处理效率低于传输安全.保护级别.默认是EncryptA...
阅读全文
摘要:2阶段提交协议.事务先提交给协调者,由协调者分发给各个RM,在一段规定的时间后。由RM询问各个RM是否提交还是终止操作。RM根据自己的状态来决定提交/终止。协调者根据RM的结果,决定操作的提交/终止。如果提交。由协调者通知各个RM来执行真正的提交。如果有一个要求终止,由协调者通知各个RM来回滚。(一...
阅读全文
摘要:可靠性会话: 端到端(多个点到点系统组成)的可靠性,基于消息,基于WS-*,可以跨平台.在信道层创建可靠性会话,由两端的缓冲区进行可靠性管理(对消息进行排序后才发给服务器端,接收到消息后回发ACK.)跟TCP类似.当消息投递不成功时,会尝试重发(Meg2)可靠性消息实现了WS—RM,WS—RX的标准...
阅读全文
摘要:并发Single重入模式.对于每一个服务实例,同一时刻只能处理一个请求,其他对该实例的请求被排队.PerCall,每一线程会分配一个新的服务实例上。不会有并发性问题。不影响吞吐量.PerSession,保护服务实例不会受到多线程客户端的影响.多客户端可以并发访问,无并发性问题。减少单一客户端吞吐量....
阅读全文
摘要:PerCall.为每次调用创建新的服务对象.内存使用量最小,增加整体的吞吐量.状态不保存,服务实例及时释放。单例的状态没有办法保存.所以应使用数据库或者文件或者全局变量来保存服务实例的状态.如果单调服务真的与状态无关,就根本不需要单调激活模式。准确地讲,正是因为状态,特别是代价昂贵的状态,才需要使用...
阅读全文
摘要:请求/响应:所有操作的默认行为,在WSDL中表现为Input/Output元素.One_Way.在WSDL中只有Input,没有回应(Output),所以没有异常报告。单向操作只会在发出调用的瞬间阻塞客户端,但是如果发出了多个单向调用,WCF会把这些调用放入队列,由于队列是有限容量的,过多数量的调用...
阅读全文
摘要:Self_hosting自托管宿主.过程:手动创建Host实例,把服务端点添加到Host实例上,把服务接口与Host关联.一个Host只能指定一个服务类型,但是可以添加多个服务端点,也可以打开多个Host.其中,Typeof(..)就是配置中的.在通常的企业应用中,我们很少会采用自宿主方式托管服务,...
阅读全文
摘要:NameSpace+Name作为服务元数据的唯一标示.BindingElement描述Binding的特征.绑定表示通信信道的配置,定义C/S间的协议。分为:传输信道(TCP,HTTP…),消息编码(Text,Binary,MTOM),协议信道(安全,事务,可靠性消息)。绑定由绑定元素组成,不同的绑...
阅读全文
摘要:CLR异常无法跨越服务边界,所有的异常都被封装(序列化)为SOAP Fault,可以让所有平台的用户接收到.SOAP1.1只有Body.1.2中含有Header+Body.未捕获异常异常会从逻辑层传递到服务层,为了保护Server,不会把异常的详细信息返回给客户端,而只会有一个通用的SOAP Fau...
阅读全文
摘要:WSDL:=契约+策略.契约主要关注操作的消息类型.策略为操作描述协议.当契约变化时,使用老契约的客户应能够继续使用,并且使用新的契约内容.一旦发布.契约就确定了.但是,策略是可以改变的.如果客户端可以动态的处理变化,那么改变策略就是安全的.服务契约允许多余,缺失的参数数量.分别会被忽略,赋予默认值...
阅读全文
摘要:消息交换的双方,为了进行消息交换,而定义的一些数据交换规则,称之为契约.契约只约束规则,不管实现.契约对客户端和服务器的要求.服务器:定义和实现契约.构建ServiceHost实例,然后暴露EndPoint.同时打开通信信道.客户端:需要服务契约的一个副本和关于EndPoint的信息.为特定的End...
阅读全文
摘要:80X86上的函数/过程调用.call指令来调用过程;ret指令(return)返回调用程序.过程如下:1)确定执行完过程后要返回的指令地址(返回/链接地址).2)将该地址保存到已知位置.在没有递归时,可将其放在任意位置.放到内存中的栈是最常见的,执行过程:call->push/ret->pop优点...
阅读全文
摘要:本文介绍从源文件开始到目标代码生成的过程.首先,是我们每天都要接触的源文件.源文件是由纯ASCII或者其他字符集组成的文本,由程序员使用文本编辑器创建.它有以下的几种形式纯文本.好处是易于维护.并且可以使用处理文本文件的程序来处理源文件.这个就是我们最常见的源代码形式了.甚至可以使用notepad来...
阅读全文
摘要:三元运算符Vb中的iif(expr,truepart,falsepart)和C#中的expr?truepart:falsepart.无论expr的结果是true还是false,true/falsepart都会被执行.所以不能写类似于obj!=null?obj.name:string.empty.tr...
阅读全文