使用WCF实现SOA面向服务编程—— 架构设计
本文转载:http://kb.cnblogs.com/page/96479/
SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功 能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的。因此,基于SOA的架构也一定是从企业的具体需求开始构建的。但 是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性。业务灵活性是指企业能对业务变更快速和有效地进行响应、并且利用业务变更来得到竞争优 势的能力。对企业级架构设计师来说,创建一个业务灵活的架构意味着创建一个可以满足当前还未知的业务需求的IT架构。使用WCF实现SOA,正好可以利用 WCF的灵活性,把业务层封装,发布为Web服务。这样可以降低系统的耦合度,加大对未知业务的扩展性。
Web服务本来就是没有区分代码的,在这个例子里在下多开发了一个Service Interface目的是为了使系统更易于管理。在开发期间,Service是不断更改的,如果在UI层上直接调用服务层,那更改将会是频密的,所以在这 里在下开发一个Service Interface层目的是为了把WSDL集成在同一个DLL程序集里面,进行统一修改。最后UI层只要直接调用Service Interface,就可以对系统直接进行操作。要以不同开发工具来实现Service Interface,这个的代价并不大,开销是可以承担的。下面附上最简单的例子,希望有经验的高手给予点评,有不妥的地方请多加指教。
//实现Ucsmy.Portal.BLL层
namespace Ucsmy.Portal.BLL
{
public class ExampleManager
{
public IList<Example> GetList(int workers)
{
IExampleDAL examleDAL = DataAccess.CreateExampleDAL();
return examleDAL.GetList(workers);
}
}
}
//在Ucsmy.Portal.Service层里使用WCF直接调用BLL层里面的方法
namespace Ucsmy.Portal.Service
{
[ServiceContract(Namespace="Ucsmy.Portal.Service")]
public interface IExampleService
{
[OperationContract]
IList<Example> GetData(int workers);
// TODO: 在此添加您的服务操作
}
public class ExampleService : IExampleService
{
public ExampleManager exampleManager;
public ExampleService()
{
exampleManager = new ExampleManager();
}
public IList<Example> GetData(int workers)
{
IList<Example> exampleList = exampleManager.GetList(workers);
if (exampleList != null)
return exampleList;
else
return new List<Example>();
}
}
}
在原代码中,在下以Ucsmy.Portal.ServiceFactory实现Service Interface层,其实这个ServiceFactory没有太多工作,只是对WCF添加服务引用,然后直接生成DLL即可。当然这只是初步的做法, 在日后完善代码的时候,这一层还需要对WCF的生命流程进行管理。
最后在UI层只要直接添加对Service.Portal.ServiceFactory的引用就可以直接运行,无需再理会 BLL,DAL.......等复杂的逻辑转换。在实现多功能分布式开发的时候,以WCF实现的SOA的开发方式更能展示其优势。在现代的大型企业系统开 发过程中,系统往往会使用B/S,C/S混合的开发模式。在以往的开发过程,开发人员往往把B/S,C/S分开来实现。在使用WCF技术后,开发人员可以 把功能模块统一发布为WCF,然后绑定不同的endpoint进行发布,将B/S和C/S方式的业务逻辑层真正地融合在一起,从而降低开发难度。
使用WCF实现SOA,可以对事务、安全、编码等进行统一管理,协调了各服务器之间的系统操作。它涵盖了之前微软推出的所有用于分布式开发的技术,包括Remoting、Web Services、WSE、MSMQ等,并以一种统一的编程模式来实现。WCF既支持具有互操作性的Web服务,也能够实现.NET客户端 与.NET服务端的通信,提供了分布式事务的支持,同时在安全性上,它完全遵循了WS-*的标准,此外,它还支持队列服务,可以非常方便地利用消息队列完 成异步操作与脱机调用。在众多优点的支持下,使用WCF实现SOA面向服务开发不失为一种理想地选择。
- 使用Seq2Seq+attention实现简单的Chatbot
- R语言可视化——用ggplot构造期待已久的雷达图
- 【实战】最新Deep Learning with Keras图书加代码,教你从零开发一个复杂深度学习模型(附下载)
- 基于zabbix 自动抓取每天监控数据!/usr/local/python/bin/python3.5
- 大过年的,一起来用Seq2Seq来作对联吧!
- python3 下调用zabbix api 获取多个机房的IP
- TensorFlow从0到1 - 14 - 交叉熵损失函数——防止学习缓慢
- 用优雅的配色来缔造图表专业主义~
- python文件名与包名冲突
- python3 Zabbix监控-api的使用-python
- 安装python虚拟环境
- 各种排序算法的分析及java&python实现
- python3elk相关---根据Elasticsearch(es)日志处理,生成excel并定时邮箱发送附件
- python数据科学-数据预处理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Stata估算观测数据的风险比
- R语言利用基线协变量提高随机对照试验的效率
- R语言使用倾向评分提高RCT(随机对照试验)的效率
- R语言调整随机对照试验中的基线协变量
- R语言用多重插补法估算相对风险
- R语言分析协变量之间的非线性关系
- stata如何处理结构方程模型(SEM)中具有缺失值的协变量
- stata对包含协变量的模型进行缺失值多重插补分析
- 互联网直播点播平台go语言搭建重定向和反向代理的区别及使用
- UNIX时间戳和北京时间的相互转换
- R语言对苏格兰独立民意调查的Meta分析
- 案例:归档自动清理脚本失效及连带影响
- R语言中固定与随机效应Meta分析 - 效率和置信区间覆盖
- R语言使用 LOWESS技术图分析逻辑回归中的函数形式
- R语言在逻辑回归中求R square R方