博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF实例 - 简介
阅读量:6440 次
发布时间:2019-06-23

本文共 3424 字,大约阅读时间需要 11 分钟。

原文链接:

Sharpy - 一个Metro项目

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

最近的更新

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

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

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

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

简介

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

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

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

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

背景

这个架构有如下要求:

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

其他假设:

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

eDirectory解决方案

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

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

源代码可以再codeplex上找到:

最后一个版本可以再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

05-July-2010

10-July-2010

16-July-2010

23-July-2010

31-August-2010

04-September-2010

15-September-2010

19-September-2010

16-October-2010

04-November-2010

24-November-2010

19-December-2010

07-January-2011

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

你可能感兴趣的文章
面对前车之鉴的AR,现在的VR要做些什么?
查看>>
vscode 换行符\n 变成\r\n
查看>>
一个绘制虚线的非常规函数(常规方法,打印机上绘制不出虚线)
查看>>
获得本机的IP,掩码和网关
查看>>
大数据之 ZooKeeper原理及其在Hadoop和HBase中的应用
查看>>
Delphi中将XML文件数据装入DataSet
查看>>
你刚才在淘宝上买了一件东西
查看>>
发布一个 Linux 下的 C++ 多线程库
查看>>
Python序列类型
查看>>
再谈ThinkPHP
查看>>
Hibernate问题浅析
查看>>
出现访问apache资源直接下载php文件的解决办法-----yum 安装 php mysql
查看>>
七种Mysql表类型
查看>>
归并与归并排序
查看>>
linux和windows互传文件、用户配置文件和密码配置文件、用户组管理、用户管理...
查看>>
spark 应用程序性能优化经验
查看>>
基于Zabbix IPMI监控服务器硬件状况
查看>>
Go语言之并发资源竞争
查看>>
vue router带参数页面刷新或者回退参数消失的解决方法
查看>>
mac本显示隐藏文件或关闭显示隐藏文件
查看>>