原文链接:WCF by Example - Introduction

Sharpy - 一个Metro项目

当前, 我正在从事一个新的Metro应用程序的项目:Sharpy。我打算为Sharpy应用程序的服务端使用在WCF实例的文章中所讨论的模式。这个目标是为了演示Metro应用程序和我们目前所遇见过的应用程序类型的相似性。目前还没有可用的代码,但希望这个很快就会改变。我希望你能喜欢。这篇文章在这里。

最近的更新

本系列最后添加的一篇文章是“WCF实例 – Chapter XIV - 验证和异常管理”,这篇文章写于2011年1月初,讨论的是如何在包含验证属性的组合体中实现IDataErrorInfo接口。这个实现方式提供了一个比较全面的验证机制,同时工作于客户端和服务端。这篇文章也讨论了异常和警告管理。

最近,对一个客户端服务组件进行了重构,当一个新的契约被创建或方法被添加或修改时,以减少客户端请求实例(artefacts)的数量。代码已经在Codeplex的trunk分支上。由于这些改变的结果,导致原有的文章需要修改,在这些分支上的代码也需要修改。在2012年10月,这个解决方案得到了修改,所以NHibernate也配置为和SQL-CE 4.0协同工作。你也许想检验一下看看你的应用程序使用SQL-CE和NHibernate一起运行会得到什么。

在2010年12月,这个应用程序的服务端被部署到Azure,在codeplex上有一个随时可以运行的客户端。WPF客户端可以调用在Azure上以WebRole方式部署的方法。这个源代码(edirectory.wpfclient.azure.zip)可以在CodePlex找到。

你也许想跟随这个系列、代码的更新:@enriquealbert/wcfbyexample

简介

这篇文章是这个系列的第一篇,讨论的是如何使用WCF为通信及NHibernate持久化设计和开发一个WPF客户端的目的。

设计企业级应用程序需要一些复杂的技能。在中小型项目里,时间和资源的分配并不方便的在更大项目中推广。这个时候,一个为最佳实践和模式的资源可以变得非常有益。有很多文章,书籍以及其他资料涵盖特定的方面,但几乎不可能找到一个地方把所有的技术和模式应用到一块以提供一个为什么和怎么做的综合方案。

这些文章的意图是提供怎么开发一个从早期阶段到功能健全阶段的企业级应用程序的一个例子。这些文章建立在那些已经涵盖新的方面或现有功能增强的架构的结果。

在这个系列中假设遵循敏捷实践,所以解决方案的架构聚焦于为RAD,DDD和TDD原则提供灵活的机制。架构的关键方面是要求能部署为一个业务探索目的的完整功能客户端,它只要求一个最基本的基础设置的覆盖。避免数据库,部署到IIS上,等等。

背景

这个架构有如下要求:

  • 使用WPF作为富客户端
  • 使用WCF服务来连接客户端和服务端
  • NHibernate用来作持久化
  • 客户端应用程序能运行在基于内存仓库
  • 探索客户端的部署必须保持简单
  • 应用程序必须是容易测试,这些测试可以基于内存或NHibernate仓库运行

其他假设:

  • 我们可以完全控制从客户到服务器的组件
  • 我们可以随意创建数据库,而不使用遗留的数据库
  • 我们使用IIS7和WAS部署的服务器组件以及TCP/IP
  • 在数据库表中我们通过主键来控制,在这个项目中,为所有的实体使用唯一长字段

eDirectory解决方案

在这个系列中,我们打算开始使用一个非常简单的业务场景。在这个系列中,焦点在于架构而不是业务领域。在将来,如果我们觉得我们想探索一些更复杂的架构概念,我们可能会扩装我们的领域。

这个业务领域基于一个简单的契约列表,当前,因为很简单,所以只需要一个实体就满足:Customer。这个方案命名为eDirectory。

源代码可以再codeplex上找到:WCF by Example

最后一个版本可以再trunk分支上找到,每一个章节位于它们自己的标签分支里。你可能想使用Codeplex的浏览功能来浏览这些分支。

架构概述

eDirectory应用程序定义了3个很不同的应用程序组成部分:数据库,服务器和客户端。

客户端和服务器端被分在不同的层里。在大多数情况下,各层之间没有相互关系。中间层使用解耦的机制,以便可以采用不同的实现。有些服务可以跨层访问。

如我们之前提到的,我们可以完全控制客户端和服务端。所以我们不会转播服务发现,而是让服务契约能在程序客户端和服务器端都可用。这对于DTOs和有些共通的业务验证是正确的。结果,一个通用的程序集将定义为包含被服务器和客户端程序共享的部分。

在服务器端,我们找到那些核心组件,业务领域定义的业务实体和它们的行为(action methods)。然后那些被定义的服务暴露我们领域方法。为持久化和序列化约束的服务在客户端和服务端只暴露DTOs。结果,实体到DTOs的转化需要用比较全面的方式来处理。

为了我们的业务领域与数据库的解耦,我们实体的持久层将负责仓库组件。我们会在这个两个层之间定义一个泛型接口。仓库的两种具体实现是可用的:内存和NHibernate。

事物管理者是我们工作单元(unit of work)的实现。它的职责是我们的业务事物和业务信息(警告和异常)的处理。

最后,我们有客户端组件,但不是最小。客户端是使用MVVM模式设计的WPF程序。这个模式提供了一个简洁的没有或非常少的Code behind的XAML组件视图,XAML的绑定能力协同VIewModel类把服务层的DTOs给呈现出来。

客户端对服务端层解耦主要分为两部分。适配器的职责是在执行服务期间所接收过来的业务信息进行管理。WCF代理层的职责是管理WCF服务,这个设计是简洁的,而且是一个比较好的从客户端到WCF服务的解耦方式。

Available articles in Codeproject

Date
Article

28-June-2010
WCF by Example - Chapter I - Baseline

05-July-2010
WCF by Example - Chapter II - Repository Locator

10-July-2010
WCF by Example - Chapter III - Response

16-July-2010
WCF by Example - Chapter IV - Transaction Manager

23-July-2010
WCF by Example - Chapter V - Contexts

31-August-2010
WCF by Example - Chapter VI - Baseline MVVM

04-September-2010
WCF by Example - Chapter VII - Contract Locator

15-September-2010
WCF by Example - Chapter VIII - Relay Command

19-September-2010
WCF by Example - Chapter IX - Notify Property Change

16-October-2010
WCF by Example - Chapter X - DI with Spring.Net

04-November-2010
WCF by Example - Chapter XI - NHibernate Implementation

24-November-2010
WCF by Example - Chapter XII - WCF Implementation

19-December-2010
WCF by Example - Chapter XIII - Business Domain Extension

07-January-2011
WCF by Example - Chapter XIV - Validation & Exception Management

Available chapters (source code) in Codeplex

Date
Chapter

14-June-2010
Chapter I - Baseline

14-June-2010
Chapter II - Response

14-June-2010
Chapter III - Response

14-June-2010
Chapter IV - Transaction Manager

14-June-2010
Chapter V - Service Locator

14-June-2010
Chapter VI - Baseline MVVM

14-June-2010
Chapter VII - Contract Locator

29-July-2010
Chapter VIII - RelayCommand

29-July-2010
Chapter IX - Notify Property Changed Pattern

29-July-2010
Chapter X - Dependency Injection

12-September-2010
Chapter XI - NHibernate Implementation

07-October-2010
Chapter XII - WCF Implementation

14-November-2010
Chapter XIII - Business Domain Extension

12-December-2010
Azure Solution - In-memory mode WebRole

07-January-2011
Chapter XIV - Validation & Exception Management

07-October-2011
Client re-factor: ServiceAdapter & CommandDispatcher pattern

转载于:https://www.cnblogs.com/joe-yang/archive/2012/11/26/2789375.html

WCF实例 - 简介相关推荐

  1. MySQL只读实例简介

    MySQL只读实例简介 更新时间:2020-07-20 10:55:37 编辑我的收藏 本页目录 简介 前提条件 只读实例.备实例和灾备实例三者之间的区别 计费 功能特点 功能限制 创建只读实例 常见 ...

  2. android 调用oracle,Android 调用WCF实例详解

    Android 调用WCF实例 1. 构建服务端程序 using System.ServiceModel; namespace yournamespace { [ServiceContract(Nam ...

  3. 脑电数据分析方法与应用实例简介-EEG Processing and Feature 1

    这是<EEG Processing and Feature Extraction>的第一个视频资料整理.内容是"脑电数据分析方法与应用实例简介". 视频地址:https ...

  4. c语言编程 目录,C语言编程实例简介,目录书摘

    内容简介: <C语言编程实例>将蓝牙小车作为教学组织引领,开展各章节.模块的教学,在教学的过程中把C语言编程.VC++软件操作.单片机外围电路搭建与调试.CAD机械制图.激光切割零件制作等 ...

  5. WCF服务一:WCF服务简介

    一.回顾开发历史: 软件架构的设计经历了:从面向对象程序,到面向组件程序设计,再到面向服务程序设计.这三种方式都致力于同一个目标:封装和重用. 面向对象程序设计:类封装功能并提供代码重用. 面向组件程 ...

  6. retext代码高亮_实例简介Markdown格式

    简介 Markdown 是一种轻量级标记语言,由John Gruber和Aaron Swartz创建,使其成为可读性最大并可再发行的可输入输出的格式. Markdown 并不是为了取代 Html,因为 ...

  7. WCF 实例 —— Android 短信助手 (WCF + Android)

    (1)最近开始学习 Android,为了更快上手于是给自己找个小课题来练习一下: WCF作为服务端开放RESTful Service,Android作为客户端将手机上的短信传给服务端显示,并轮询服务端 ...

  8. 官网实例详解-目录和实例简介-keras学习笔记四

    https://github.com/keras-team/keras/tree/master/examples Keras examples directory Keras实例目录 (点击跳转) 官 ...

  9. java友元类_C++友元(Friend)用法实例简介

    相对于Java而言,友元是C++中特有的一种元素,很多教材上对其介绍的相对较少,因此初学的时候往往不能很快掌握,本文总结了友元的用法和一些注意的地方,供大家参考借鉴.希望能对初学C++的朋友起到一点帮 ...

最新文章

  1. 得到当前数据库中所有用户表信息
  2. html文件上传协议,HTTP 上传文件的协议格式
  3. CO07利润中心必输
  4. SAP 调用smartforms打印如何统计实际打印状态和打印次数
  5. bash循环控制语句之for循环
  6. Git commit后,本地代码丢失解决方法
  7. 10亿美元:MIT宣布建立计算学院,近70年来最大结构变革只为AI
  8. linux 开机文件系统报错.error 无法挂载
  9. pytorch visdom可视化工具学习—1—详细使用-3-Generic Plots和Others
  10. 基础数据结构-线性表-顺序表的连续操作
  11. 【STM32H7的DSP教程】第3章 Matlab简易使用之基础操作
  12. ******实战案例解析
  13. 大麦网抢票python代码_damai_ticket
  14. css翻转箭头,巧用css3轻松实现箭头上下旋转
  15. 【低代码】云端组态集成与设备管理配置
  16. java毕业设计大学生心理咨询管理系统mybatis+源码+调试部署+系统+数据库+lw
  17. 图论科学家教你如何安排婚礼座次
  18. OpenJudge NOI 1.8 20:反反复复
  19. Scratch技巧—-使用克隆技术实现菜单按钮
  20. 实验室信息化管理系统创新管理模式

热门文章

  1. SAE去掉index.php实现自定义固定链接
  2. weblogic10异常:org.hibernate.hql.ast.HqlToken
  3. 认证(登录)功能实现
  4. MySQL分组函数的介绍
  5. Nacos源码心跳异常检测
  6. 基于注册中心的Dubbo服务
  7. 利用有序节点来实现分布式锁
  8. Spring 框架中的单例Beans 是线程安全的么?
  9. 课程分类管理-添加课程分类
  10. Redis工具类封装讲解和实战