摘要: 我们做系统时根据需求会写很多业务实体,这些实体一般用来作为业务层方法的参数(输入或者输出),例如 public bool AddUser(UserEntity userentity)这个业务方法,UserEntity是我们定义的业务实体,我们在写这个方法时,先要对这个实体里面的属性值进行合法性验证,才能进行以后的操作,当然,我们可以在在这个方法中手工写一些验证的代码来完成,只是比较麻烦而已,我们也可以借助VAB,在实体定义的属性上增加一些验证的Attribute,如下:
阅读全文
摘要: 上回说到,我们配置了一下UnityConfig层,在这个层中定义了一个IContainerAccessor的接口和一个返回IUnityContainer类型的方法,这个方法的主要作用就是把Service层中的接口类和Business层中的接口实现类装配到UnityContainer中并返回,也就是指定那个接口实现类去实现某个接口类。
阅读全文
摘要: 这几天园子里关于软件架构的讨论还是相当激烈,大家都想要一种能最大限度的降低各层之间依赖关系的的架构来适应变化的需求,谁都不喜欢改一点而动全身,尽量降低各层的改动产生的相互影响。
本篇我以理论和实践(源代码)两个方面和大家探讨一下我的方案,希望大家多提宝贵意见。
阅读全文
摘要: 目前在.Net下实现AOP的方式分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代或修饰原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。动态代理实现方式利用.Net的Attribute和.Net Remoting的代理技术,对对象执行期间的上下文消息进行截取,并以消息传递的方式执行,从而可以在执行期间加入相关处理逻辑实现面向方面的功能(请参考:http://www.cnblogs.com/wayfarer/articles/256909.html);而静态织入的方式实现一般是要依靠一些第三方框架提供特定的语法,例如PostSharp,它的实现方式是采用 MSIL Injection和MSBuild Task在编译时置入方面的代码,从而实现AOP。
阅读全文
摘要: WCF支持多种认证技术,例如Windowns认证、X509证书、Issued Tokens、用户名密码认证等,在跨Windows域分布的系统中,用户名密码认证还是比较常用的,要实现用户名密码认证,就必须需要X509证书,为什么呢?因为我们需要X509证书这种非对称密钥技术来实现WCF在Message传递过程中的加密和解密,要不然用户名和密码就得在网络上明文传递!详细说明就是客户端把用户名和密码用公钥加密后传递给服务器端,服务器端再用自己的私钥来解密,然后传递给相应的验证程序来实现身份验证。
阅读全文
摘要: WebService来上传文件存在的问题是效率不高,而且不能传输大数据量的文件,当然你可以用Wse中的MTOM来传输大文件,有了WCF就好多了,通过使用WCF传递Stream对象来传递大数据文件.
阅读全文
摘要: 我们继续上一节中的那个项目,给那个员工列表增加 添加修改删除功能。和上一节一样,我们先从服务器端说起,服务器端需要提供WCF接口给客户端调用,我们先来写几个BLL的数据处理方法
然后在EmployeeService.svc文件中把这几个方法封装WCF接口
这样服务器端的工作就完成了,下面到客户端.也就是EXTJS的代码编写,这里要注意两个问题:
一个是关于WCF传递过来的日期型数据和从EXTJS的form中取得的日期型数据相互转化的问题,WCF传递过来的日期形式为“\/Date(62831853071)\/”括号里面的数字是UTC时间,我们需要设置Ext.form.DateField的format : "Y-m-d",然后把两种类型在通讯之前进行相互转化。
第二个是当BodyStyle = WebMessageBodyStyle.Wrapped 的时候WCF会自动把传递过来的值进行封装,这个在第二节的时候有详细说明,在把WCF传过来的值转化为ExtJS需要的对象的时候去掉这个封装。
基于以上两点,我写了一个WCFHelper.js的文件,代码如下
阅读全文
摘要: 这次我们使用一个测试的数据库CompanyInfoDB,里面有两张表,部门和员工,并外键关联,数据库调用采用Linq的Sqlmetal 命令方式,在Visual Studio 2008的命令提示符中输入以下命令:D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /conn:server=172.16.1.52;database=CompanyInfoDB;uid=sa;pwd=sa123456 /map:c:\LinqTemp\CompanyInfoDB.map
/code:c:\LinqTemp\CompanyInfoDB.cs /serialization:Unidirectional
然后把生成的CompayInfo.map 文件和CompanyInfo.cs文件加入到项目中,并添加System.Data.Linq的引用,还要修改一下Web.Config 加入数据库链接字符串和XmlMappingSource文件的位置。
阅读全文
摘要: ExtJS调用的服务器端目前有三种实现方式
一种是网页的方式,他的Content-Type:是application/x-www-form-urlencoded,这种方式适用范围比较广泛,只要是能输出网页的服务器端环境都可以。ExtJS官方网站上的例子基本上都是这种形式,服务器端的环境是PHP,http://cmsoft.cnblogs.com/ 是实现这种方式的.net版本,不过让我这样来写dotNet代码我可不愿意。
一种是WebService的方式,也就是通过XML在服务器和客户端传递数据的方式,在DotNet下这种实现方式比较复杂,也比较搞笑,原因是在服务器序列化的xml要在客户端用Asp.Net Ajax才可以反序列化,然后才能被ExtJS调用,我既然用了ExtJS框架,还得再用ASP.Net AJAX框架,实在不爽!
还有一种是WCF的形式,他的Content-Type是 application/json,其原理是基于JSON来在服务器端和客户端传递数据,我们必须得定义服务器端方法的输入,输出参数为JSON形式才可以,其次还得进行URL重写等(其实就
阅读全文