首页 文章 精选 留言 我的

精选列表

搜索[soa],共1154篇文章
优秀的个人博客,低调大师

参加了iDOF2016会议,发表演讲“油田SOA与云平台的系统思考与实践”

PPT的全部抓图,扫描二维码直接到微信里去看吧: 本文转自申龙斌的程序人生博客园博文,原文链接:http://www.cnblogs.com/speeding/p/5988609.html,如需转载请自行联系原作者 ----==== Email: slofslb (GTD) qq.com 请将(GTD)换成@ ====---- 版权声明:自由转载-非商用-非衍生-保持署名( 创意共享3.0许可证) 作者: 申龙斌的程序人生 ---- 魔方、 桥牌、 象棋、游戏人生... ---- BASIC、C++、JAVA、 C#、 Haskell、 Objective-C、 Open Inventor、程序人生... ---- GTD伴我实现人生目标 ---- SeismicPro地震剖面显示程序 ---- Eclipse油藏数值模拟二进制文件格式解析和格式转换软件

优秀的个人博客,低调大师

WCF+WF双剑合璧构建微软的SOA系列(一):从一个简单的Demo开始

本系列文章将从实例出发,以实例结尾。由浅入深讲解在我们项目中如何使用WCF和WF。我们会发现使用WCF+WF将造就出其他技术无法达到的高度。最后我会将程序架到云端。 微软.net的3W(WPF、WCF、WF)战略如下图。WCF负责通信,WPF负责界面展示,WF负责处理业务逻辑,如下图。 本系列文章会主要用到上图中的所有技术,但是主要讲述如何使用WCF和WF来实现系统的中间层。看过亮剑的朋友知道李云龙常打胜仗,并不是他懂得很多很多的战争的理论知识,而是来自实战中的经验。所以本系列的文章以实战为核心,在实战中出理论,不循规蹈矩,我将把自己的实力拿出来,亮出自己的宝剑。 本系列文章除了WCF和WF两种主要的技术,还会用到很多其他的技术,WCF和WF两种技术将一用到底,也会牵扯到其它的技术如WPF、Asp.net MVC、Asp.net Web Form,NH、EF以及一些常用的技巧。我将在实战中进行演练和对比,在实战中发现最适合的技术。 好了,牛皮吹完了,进入今天的正题。本文是这个系列的第一篇文章,我想了想还是从一个简单的Demo开始。通过这个实例来说明在项目中如何使用WCF和WF。WCF是如何进行数据传递的,WF是如何处理业务逻辑的。而实例的业务场景是非常常见的入库单:录入入库材料,更新库存数量。 系统架构 首先,我将说说这个系统架构。可以分为4层。 第一层:数据持久层:这个例子中我用EF实现的。 第二层:业务逻辑层:很明显,这一层我要使用WF实现。 第三层:服务层:很明显,这一层我要使用WCF实现。 第四层:界面层:这里我使用Asp.net MVC。后续文章中,我将会陆续使用MVC、WebForm、WPF、SL四种界面进行展示。 架构图如下: 数据库结构图:只有两种表。EnterStock表示入库记录表,Stock表示库存表。 数据持久层设计:前面提到了,我使用了EF4实现数据库的访问。EF的基本使用大家可以到网上查阅,这里我主要讲一下值得讲解的东西。由于使用EF生成Model,那么如何在MVC中进行DataAnnotation验证。看下面代码设计就明白了。以库存表为例: public partial class StockAutoMetadata { [DisplayName("Material ID")] [Required] public System.Guid MaterialID { get; set; } [DisplayName("Material Name")] [Required] [StringLength(50)] public string MaterialName { get; set; } [DisplayName("Quantity")] [Required] public int Quantity { get; set; } } [MetadataType(typeof(StockAutoMetadata))] public partial class Stock { } 在partial类中注入元数据属性。 业务逻辑层设计: 用WF处理业务逻辑层是本系列文章的重点。我以入库操作为例。 1、增加材料的功能函数设计 public sealed class InsertEnterStock : CodeActivity { public InArgument<EnterStock> Stock { get; set; } protected override void Execute(CodeActivityContext context) { InvoicingEntities entity = new InvoicingEntities(); entity.AddToEnterStock(Stock.Get(context)); entity.SaveChanges(); } } 2、更新库存的功能函数设计 public sealed class UpdateStock : CodeActivity { public InArgument<EnterStock> EnterStock { get; set; } protected override void Execute(CodeActivityContext context) { InvoicingEntities entity = new InvoicingEntities(); var res = (from r in entity.Stock.ToList() where r.MaterialID == EnterStock.Get(context).MaterialNO select r).FirstOrDefault(); res.Quantity = res.Quantity + EnterStock.Get(context).Quantity; entity.ApplyCurrentValues(res.EntityKey.EntitySetName, res); entity.SaveChanges(); } } 3、入库操作的业务函数设计 分析:这里我将业务逻辑处理分成了两种形式。 1、功能函数:任务单一、简单;以代码的方式展现。 2、业务函数:业务复杂,有功能函数组合而成;以图形化的方式展现。 这样设计,我业务逻辑处理就非常清晰了。 服务层设计:在WCF中我要做的只是启动这些业务流程。 契约: [ServiceContract] public interface IInvoicingService { [OperationContract] string EnterStock(EnterStock stock); [OperationContract] IEnumerable<Stock> GetStockList(); [OperationContract] IEnumerable<EnterStock> GetEnterStockList(); } 实现: public class InvoicingService : IInvoicingService { public string EnterStock(EnterStock stock) { var p = new Dictionary<string, object> (); p.Add("argEnterStock", stock); WorkflowInvoker.Invoke(new EnterStockBusiness(), p); return "ok"; } public IEnumerable<Stock> GetStockList() { IDictionary<string, object> outArgument = WorkflowInvoker.Invoke(new GetStockList()); return outArgument["StockList"] as List<Stock>; } public IEnumerable<EnterStock> GetEnterStockList() { IDictionary<string, object> outArgument = WorkflowInvoker.Invoke(new GetEnterStockList()); return outArgument["EnterStockList"] as List<EnterStock>; } } 在服务层中,我没有任何的业务逻辑判断和处理,我完全封装到业务逻辑层了。 界面层:界面层你可以使用如何你熟悉的技术去实现。这里我使用了Asp.net MVC。具体的实现我不细说了,就让我演示一下这个简单的Demo。 1、简单的主页 2、 库存中两种材料的库存数量都是0 3、添加材料 4、库存数量被更新 5、入库记录列表 总结:本文是WCF+WF双剑合璧系列的第一篇文章,带领大家实现了一个简单的Demo。这个Demo还是原型,存在很多不足。希望大家能提出你宝贵的建议,帮助我写好这个系列的文章。下篇文章中将会谈谈系统如何实现错误处理机制。 代码:http://files.cnblogs.com/zhuqil/Invoicing.rar 本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/11/01/1865870.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册