返回首页

  ; & #160; &# 160;  0; {S0} & #160;  0; &# 160;   ; & #160;  60; 第一章  60;  0; 最新modificationsnbsp;
&# 160; 添加到该系列的最后一篇文章是WCF范例 - 第十四章 - 验证放大器; 异常管理,补充说:这篇文章是2011年1月上旬和讨论 & #160; 如何实现IDataErrorInfo接口验证属性的组合。 这种方法提供了一个全面的验证机制,无论是在客户端和   ; 服务器端。本文还讨论了异常和预警管理。 & #160;
近日,客户服务组件的因素已经发生减少在客户端所需的文物数量 当创建一个新的合同或补充或修订方法。代码是已经在主干上的分支。现有条款需要修改这些变化的结果,在树枝的代码也需要变化。 0;
在2010年12月,应用程序的服务器端被部署到Azure,CodePlex上提供一个现成的运行客户端。 WPF客户端可以调用 & #160;在Azure部署一个WebRole方法。此源代码可以在CodePlex在
您可能要遵循系列/代码更新:  60; @ enriquealbert / wcfbyexample 简介
本文首先讨论了如何设计和开发了一系列的 WPF客户端使用的通讯和NHibernate WCF持久性的目的。  60;
设计企业应用程序需要一套全面的技能。在小 分配的时间和资源的中小型项目可不可行 & #160; 程度,是在较大的项目,它是在这个时候,最佳做法的来源 和模式可以成为非常有利的。有很多文章,书籍和其他 材料涉及具体的方面,但它几乎是不可能找到一个  60; 地方所有的技术和模式一起提供使用 一个全面讨论为何以及如何。
这些文章的意图是提供一个完整的企业如何的例子 应用程序开发的早期阶段,以一个全功能的阶段。的文章  ; 建立对每一个新的方面覆盖和/或现有功能的其他顶部 增强作为调整建筑师业务的非功能性的结果 & #160;要求。
 0;它是在一系列假设,遵循敏捷实践,使解决方案的 建筑师侧重于提供的RAD,DDD和TDD方法的灵活机制。 建筑师的一个关键方面是能够部署一个全功能的要求  60; 客户对业务拓展的目的,需要一个最低的基础设施 足迹;避免数据库,部署到IIS等on.nbsp; Backgroundnbsp;
建筑师的要求如下: 富客户端使用WPF 客户端连接到服务器使用WCF服务 NHibernate是用于持久性的目的 客户端应用程序可以运行对内存中的资料库(探索客户)   ; 探索客户端的部署必须保持简单  60; 应用程序必须容易测试,测试可以对运行在内存或NHibernate 库
其他假设: 我们有完全控制在客户端和服务器组件 我们从头开始创建数据库,我们不使用一些旧的数据库  60; 我们正在部署的服务器组件使用IIS7和WS,我们将使用TCP / IP 我们有完整的设计控制在数据库中的表的PK中,我们将采用独特的   ; 在这个项目为我们所有的实体长领域 eDirectory的解决方案
我们将开始使用一个非常简单的业务场景,在我们的系列的,重点  0; 该系列的架构不是业务领域。我们可能会扩大我们的域名 在未来,如果我们发现,我们要探索一些更复杂的建筑师concepts.nbsp的;
  ; Thenbsp;业务domainnbsp;是基于一个简单的接触,它是目前 这么简单,只需要一个单一的实体:客户。解决方案的名称是 &# 160; eDirectory.nbsp;
源代码可以在CodePlex发现:
 0; 最新版本,可以发现在主干分支,每章是位于 其自己的标记分支。你可能想使用在Codeplex上的浏览功能导航  60; 在branches.nbsp之间;   ;建筑师Overviewnbsp;
eDirectory的应用程序定义了三个差异化的应用程序组件:& #160; 数据库,服务器和client.nbsp;   ; {S1}
& #160; 在客户端和服务器应用程序的结构成层,在最 案件层层堆叠旁边对方,连续层 脱钩机制,使不同的实现可以使用。有些服务 可跨多个层。
正如我们前面提到的,我们的客户端和服务器的完全控制。因此,我们将 60; 后期服务发现继电器,而不是服务合约 在应用程序的两侧。这也是真正的DTO和一些常见的 业务验证。因此,一个共同的的装配是指包含组件 & #160; 由服务器和客户端applications.nbsp; NBSP的共享; {S2} &# 160; 在服务器端,我们发现的核心组件,业务领域的声明 业务实体和它们的行为(行动的方法)。然后服务声明 公开我们的域的动作方法。服务fornbsp; persistencenbsp; 序列化的制约,只能暴露客户端和服务器之间的DTO。因此, 实体转化为DTO的,需要一个全面的解决 方式。 为了分离我们的业务domainnbsp; fromnbsp数据库,资源库 &# 160; 组件是负责我们的实体的持久性。我们将定义一个 60; 这两层之间的通用接口。两个具体的实现 库可供选择:在内存和NHibernate.nbsp; 事务管理是我们的quot; workquot单位;实施。它负责   ; 我们的商业交易和处理业务消息(警告和 例外)。 & #160; {S3} 最后,但并非最不重要,我们有客户端组件。客户端是一个WPF应用程序 使用MVVM模式设计的。这种模式提供了一个整洁的观点的XAML组件 没有或非常少的代码背后,XAML中的绑定功能结合  0; 如何在客户端呈现所提供的DTO的ViewModel类利用 服务层。   ; 客户端分为两个主要部分分离的服务层。该适配器 负责管理业务消息在执行过程中检索 服务。 WCF代理层是负责管理WCF服务, & #160; 设计是整齐的,是一种很好的方式,从WCF服务客户端分离。 {S4}的 在CodeProject上可用的文章
&# 160;   ; &# 160;   ; & #160; 日期  60;   ; & #160; 文章   ; & #160;  0; 2010年6月28日  60;   ; & #160; WCF通过例如  60; - 第一章 - 基线   ; &# 160;  0; 2010年05月   ; & #160;  60;   ; &# 160;  0; 2010年7月10日 &# 160;  0; &# 160;   ; & #160;  60; 2010年7月16日  ; & #160;  60;   ; &# 160;  0; 2010年7月23日&# 160;  0; &# 160;   ; & #160;  60; 2010年8月31日 & #160;  60; &# 160;  0; 2010年04月   ;  0; & #160;  60;   ; 2010年9月15日  60;   ; & #160; {A9} &# 160;  0; & #160;  60; 2010年9月19日 & #160;  60;   ; WCF示例 - 第九章 - 通知物业 &# 160; 更改 &# 160; & #160;  60; 2010年- 10 - 16 & #160;  60;   ; {A10}  0;  60;   ; 2010年- 11 - 04 &# 160;  0; {A11}   ; & #160;  0; 2010年11月24 &# 160;  0; {A12}  60;   ; 2010年12月19日 &# 160;  0; WCF的范例 - 第十三章 - 业务领域  0; 扩展 &# 160;  0; &# 160; 2011年一月07 &# 160;  0; WCF的范例 - 第十四章 - 验证放大器; &# 160; 异常管理 & #160;  60;
 60; 在Codeplex上的可用章(源代码)
&# 160;  0; &# 160; 日期  60;   ; & #160; 章 & #160;  60;   ; & #160;  60; 2010年6月14日   ; & #160;  60; 第一章 - 基线  60;   ; & #160;  60;   ; 2010年6月14日 & #160;  60;   ; 第二章 - 响应   ; &# 160;  0; 2010年6月14日&# 160;  0; 第三章 - 响应   ; & #160;  0; 2010年6月14日  60;   ; & #160; 第四章 - 事务管理  60;   ; & #160;  60;   ; 2010年6月14日 & #160;  60;   ; 第五章 - 服务定位器 &# 160;  0; 2010年6月14日 &# 160;  0; 第六章 - 基线MVVM  60;   ; &# 160;  0; 2010年6月14日 & #160;  60;   ; 第七章 - 合同定位  60;   ; & #160;  60;   ; 2010年7月29日 & #160;  60;   ; 第八章 - RelayCommand&# 160;  0; &# 160;  0; 2010年7月29日 &# 160;  0; 第九章 - 通知属性更改模式   ; & #160;  60;   ; & #160; 2010年7月29日  60;   ; & #160; 第十章 - 依赖注入  60;   ; & #160;  60;   ; 2010年9月12日 &# 160;  0; 第十一章 - NHibernate的实施   ; & #160;  0; 2010年- 10 - 07  0; &# 160; 第十二章 - WCF实现  60;   ; & #160;  60;   ; 2010年11月14  0; &# 160; 第十三章 - 业务领域扩展  60; &# 160;  0; 12 - 12 - 2010 &# 160;  0; Azure的解决方案 - 在内存模式WebRole & #160;  60;   ; & #160;  60; 2011年一月07  60;   ; & #160; 第十四章 - 验证放大器;异常管理  60;   ; &# 160;  0; 07 - 10 - 2011  60;   ; & #160; 客户端重新因素:ServiceAdapter放大器; CommandDispatcher格局  60;   ; &# 160; 以后的章节
 60;   ; & #160;  60; 章  60;   ; & #160; 国家 & #160;  60;   ; & #160;  60; Azure的部署 - 在内存WebRole  60;   ; & #160; 源代码是可用   ; &# 160;  0; Azure的部署 - NHibernate的WebRole &# 160;  0; 有待 &# 160;  0; &# 160;  0; 现有章节修订为客户重新因素的结果 & #160;  60;   ; 有待  0; & #160;  0;

历史
& #160; 2010年6月14日 - 文章创建。 &# 160;
2010年6月28日 - 第一章我是做系列出版。
05 2010年7月 - 第二章被添加到序列
 60; 2010年7月10日 - 第三章被添加到序列
2010年7月16日 - 第四章被添加到序列
2010年7月23日 - 第五章被添加到序列
2010年8月31日 - 第六章被添加到序列
2010年9月04 - 第七章被添加到序列
2010年9月15日 - 第八章被添加到序列
2010年9月19日 - 第九章被添加到序列
2010年10月07日 - 第十二章的源代码可以在CodePlex
 60; 2010年10月16日 - 第十章被添加到序列
2010年11月04日 - 第十一章被添加到序列
2010年11月24日 - 第十二章被添加到序列
2010年12月12日 - 在内存WebRole部署到微软Azure的
2010年12月19日 - 第十三章被添加到序列
  ; 2011年01月07日 - 第十四章被添加到序列
2011年2月09 - 第十四章第2条中被添加到序列
2011年10月07日 - 客户端重新因素是在Codeplex

回答

评论会员:Ankitaaguggi 时间:2012/01/26
{五},这是真棒后。对我真的很有帮助。在这里,我有另一个有用的链接相关的这篇文章在互联网上,您可以通过点击链接检查...出它

{A13}

在这里,我想感谢大家。


{中六}感谢大家
评论会员:!WebGrave 时间:2012/01/26
您好,恩里克
在这个时刻,我尝试运用你的伟大的模式,从这篇文章。另外,我需要添加一些客户端应用程序的授权功能。让我们有一个用户名和passward和服务器的API,让我们需要在每一个请求数据(通过HTTPS)。我看到一些方法来修改这个目的,你的模式。举例来说,它适用于添加新方法的一个getCustomerService(用户名,密码)IContractLocator接口(或设置AUTH数据通过属性的具体实现)?另一种方法是设置授权数据,全球范围内的客户端应用程序(只有一个用户可以使用应用程序)
恩里克,关于这个问题你可以咨询我
评论会员:?恩里克伟业 时间:2012/01/26
从我的经验,应用程序的安全性是基于菜单,按钮等设置为
的知名度。我通常公元校长映射到包含应用程序的权限的应用程序角色。在最近的一个WPF项目,我们启用了服务器的方法,该方法返回一个为用户提供应用程序的权限列表。 (ServiceSecurityContext是WCF用来收集当前的WindowsIdentity的细节)。然后,在客户端,我们从标准控件开发扩展控件可以在XAML中用于表示应用程序的权限需要启用/显示控制DependencyProperties。

您可能还需要添加一个额外的安全/授权检查服务器的方法。我能想到几个解决方案,可能IContractBehavior实施(InstanceCreationAttribute),但类似的东西,而不是一个IOperationBehavior实施可能会做的伎俩
评论会员:。Dasiths 时间:2012/01/26
非常好详细,点
评论会员:游客 时间:2012/01/26
caosnight:非常感谢您这篇文章是我对我的第一个WCF和NHibernate项目的基础。我保持新的更新和Silverlight执行
mtaboy
评论会员:游客 时间:2012/01/26
在WPF层的喜......你使用MVVM模式......但我HAV一个question.in您viewmodels你有参考其观点...MVVM正确
?恩里克伟业
评论会员:游客 时间:2012/01/26
嗨,我明白你的意思,在eDirectory的解决方案,例如下面的代码是在CustomerDetailViewModel类中包含:codeprelang="c#" spanclass="code-digit"01/spanspanclass="code-keyword"private/spanspanclass="code-keyword"readonly/spanCustomerDetailViewView; spanclass="code-keyword"public/spanCustomerDetailViewModel(CustomerDtooperation){CustomerServiceAdapter=spanclass="code-keyword"new/spanServiceAdapter<ICustomerService();Model=spanclass="code-keyword"new/spanCustomerDetailModel{Customer=spanclass="code-keyword"new/spanCustomerDto()};spanclass="code-keyword"if/span(operation!=spanclass="code-keyword"null/span)Model.Customer=operation;spanclass="code-digit"02/spanView=spanclass="code-keyword"new/spanCustomerDetailView{DataContext=spanclass="code-keyword"this/span};}/pre/code正如您所指出的ViewModel知道视图,行01。在ViewModel负责的创建和查看,行02初始化。我之所以保持一个参考视图能够触发就在我的命令查看了一些行动。关闭窗口等简单的事情,如:{C}我可以有一个更通用的参考,而不是宣告一个参考CustomerDetailView,相反,它可能是一个窗口的引用,甚至更好一些接口,封装所需的功能。我还要补充一些additonal代码/逻辑,以纾缓,而无需创建一个窗口实例的ViewModel的测试。你能提出一个更好的方式来履行上述规定的呢?感谢
mtaboy
评论会员:游客 时间:2012/01/26
在mvvmlight工具包,如一些MVVMfremeworks使用调停服务(信使mvvmlight类)
恩里克伟业
评论会员:游客 时间:2012/01/26
非常有趣的,是有意义的。值得一看。感谢
Wooters
评论会员:游客 时间:2012/01/26
伟大的工作,感谢分享
。罗兰埃布
评论会员:游客 时间:2012/01/26
链接章我是破{A14}
恩里克伟业
评论会员:固定...感谢 时间:2012/01/26
Sathishkumar_P
评论会员:尼斯队友 时间:2012/01/26
Vivek乔哈里
评论会员:很好的一个.....{BR} 时间:2012/01/26
Pranay蛙
评论会员:游客 时间:2012/01/26
尼斯和感谢分享如有任何问题:http://pranayamr.blogspot.com/做我的文章投票{A15}2010年12月最佳整体文章
prasad02
评论会员:游客 时间:2012/01/26
现在你有许多相关的职位,所以你需要有第一个和最后一个按钮,总是{中六}感谢和问候,普拉萨德
prasad02
评论会员:大5/5 时间:2012/01/26
恩里克伟业
评论会员:支持 时间:2012/01/26
WebGrave
评论会员:游客 时间:2012/01/26
嗨,恩里克这是很酷的重磅炸弹)。但我有一个问题。为什么ü没有设置的DataMember]属性的DTO类(如CustomerDto等)的属性。WCF会如何理解这个数据字段被序列化
?恩里克伟业
评论会员:游客 时间:2012/01/26
?WebGrave写道:WCF如何理解这个数据字段被序列化与。NET3.5SP1中WCF是能够序列化POCO类没有标记。您可能要检查的{A16}]。我只使用属性,如果真的是必要的,WCF序列可以非常棘手,所以我倾向于保持它简单。反馈
。WebGrave
评论会员:thanx 时间:2012/01/26
rajesh_chan
评论会员:游客 时间:2012/01/26
我可以在VS2008中运行所有这一切?感谢和问候,拉杰什Chandras
恩里克伟业
评论会员:游客 时间:2012/01/26
。eDirectory的源代码是一个VS2010的解决方案,我记得有一些问题,在开始时我尝试使用了VS2010的Express版本,而不是我用的是行货版的VS2010的{BR}唯一的"附加上"我们正在使用的MS单元测试,其余的第三方库都包含在源代码。您可以尝试手动"向下级"的项目,VS2008的,因为我们不使用任何NET4.0的新功能尚未
。fgoldenstein
评论会员:游客 时间:2012/01/26
非常好的文章!我认为,这将是非常有趣的,如果你对部署的谈话。部署问题很难解决,他们非常费时。谢谢!!来自阿根廷的问候
恩里克伟业
评论会员:游客 时间:2012/01/26
当然,但你能有点更具体的?你在部署的服务器或客户端组件的关注?如果是在服务器端,你在想在部署应用程序方面IIS6IIS7的与Windows服务或您自己的应用程序?也许你有兴趣在WCF传输绑定使用?我只是不知道你在找什么。感谢