Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署

本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能。
《福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!》
《Rafy 领域实体框架示例(1) - 转换传统三层应用程序》
以 Rafy 开发的应用程序,其实体、仓库、服务代码不需要做任何修改,即可同时支持单机部署、C/S 分布式部署。本文将说明如果快速使用 C/S 分布式部署。
前言
截止到上一篇,我们开发的应用程序都是采用直接连接数据库的模式:

接下来,将通过一些简单的调整,使得这个应用程序支持以 C/S 架构部署。整个过程只需要少量的代码:

包含以下步骤:
- 添加服务端控制台应用程序项目
- 修改客户端应用程序连接方式
- 配置客户端应用程序
- 运行示例
- 代码下载
添加服务端控制台应用程序项目
在整个解决方案中添加一个新的控制台应用程序,取名为 ServerConsole:

为项目添加所有 Rafy 程序集、CS 实体程序集以及 System.ServiceModel 程序集的引用:

在 Main 函数中添加以下代码,启动服务端领域项目,并开始监听 WCF 端口:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.ServiceModel;
5: using System.Text;
6: using CS;
7: using Rafy;
8: using Rafy.Domain;
9:
10: namespace ServerConsole
11: {
12: class Program
13: {
14: static void Main(string[] args)
15: {
16: PluginTable.DomainLibraries.AddPlugin<CSPlugin>();
17: new DomainApp().Startup();
18:
19: using (ServiceHost serviceHost = new ServiceHost(typeof(Rafy.DataPortal.WCF.ServerPortal)))
20: {
21: serviceHost.Open();
22: Console.WriteLine("Press <enter> to terminate service");
23: Console.ReadLine();
24: serviceHost.Close();
25: }
26: }
27: }
28: }
然后,为本项目添加应用程序配置文件 App.config,代码如下:
1: <?xml version="1.0" encoding="utf-8" ?>
2: <configuration>
3: <appSettings>
4: <add key="SQL_TRACE_FILE" value="D:\SQLTraceLog.txt"/>
5: </appSettings>
6: <connectionStrings>
7: <add name="CS" connectionString="server=.\SQLExpress;database=ClothesSys;uid=sa;pwd=GIX4" providerName="System.Data.SqlClient"/>
8: </connectionStrings>
9: <system.serviceModel>
10: <services>
11: <service name="Rafy.DataPortal.WCF.ServerPortal" behaviorConfiguration="includesException">
12: <endpoint address="/Text" binding="basicHttpBinding" contract="Rafy.DataPortal.WCF.IWcfPortal"/>
13: <host>
14: <baseAddresses>
15: <add baseAddress="http://localhost:8000/RafyServer" />
16: </baseAddresses>
17: </host>
18: </service>
19: </services>
20: <behaviors>
21: <serviceBehaviors>
22: <behavior name="includesException">
23: <serviceMetadata httpGetEnabled="true" />
24: <serviceDebug includeExceptionDetailInFaults="true" />
25: </behavior>
26: </serviceBehaviors>
27: </behaviors>
28: </system.serviceModel>
29: </configuration>
修改客户端应用程序连接方式
接下来需要把界面程序变更为连接服务端。打开 ClothesSys 项目中的 Program.cs 文件,修改为以下代码:
1: static class Program
2: {
3: /// <summary>
4: /// 应用程序的主入口点。
5: /// </summary>
6: [STAThread]
7: static void Main()
8: {
9: PluginTable.DomainLibraries.AddPlugin<CSPlugin>();
10: new ClientDomainApp().Startup();
11:
12: Application.EnableVisualStyles();
13: Application.SetCompatibleTextRenderingDefault(false);
14: Application.Run(new formLogin());
15: }
16: }
17:
18: /// <summary>
19: /// 客户端使用的应用程序类型。
20: /// </summary>
21: public class ClientDomainApp : DomainApp
22: {
23: protected override void InitEnvironment()
24: {
25: RafyEnvironment.Location.DataPortalMode = DataPortalMode.ThroughService;
26:
27: base.InitEnvironment();
28: }
29: }
RafyEnvironment.Location.DataPortalMode 表示连接数据的模式,默认值是DataPortalMode.ConnectDirectly(直接连接数据库),ClientDomainApp 类把该值变更为 DataPortalMode. ThroughService(通过服务连接数据)。
配置客户端应用程序
在客户端配置文件中,删除数据库连接配置,并添加 WCF 连接配置,如下:
1: <?xml version="1.0"?>
2: <configuration>
3: <configSections>
4: <section name="rafy" type="Rafy.Configuration.RafyConfigurationSection, Rafy" />
5: </configSections>
6: <rafy
7: dataPortalProxy="Rafy.DataPortal.WCF.ClientProxy, Rafy.Domain"
8: collectDevLanguages="IsDebugging">
9: </rafy>
10: <system.serviceModel>
11: <client>
12: <endpoint name="ClientProxyEndPoint" address="http://localhost:8000/RafyServer/Text"
13: binding="basicHttpBinding" bindingConfiguration="basicHttpBindingConfig"
14: contract="Rafy.DataPortal.WCF.IWcfPortal" />
15: </client>
16: <bindings>
17: <basicHttpBinding>
18: <binding name="basicHttpBindingConfig" receiveTimeout="00:20:00" sendTimeout="02:00:00" maxReceivedMessageSize="1000000000">
19: <readerQuotas maxDepth="64" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
20: </binding>
21: </basicHttpBinding>
22: </bindings>
23: </system.serviceModel>
24: </configuration>
运行程序
先运行 ServerConsole,成功运行界面:

再运行 ClothesSys,点击登录。登录成功,即说明已经成功使用 C/S 进行部署。


代码下载
下载地址:http://pan.baidu.com/s/1AB9TL

本文的代码在“3.使用 CS 部署程序”文件夹中。
欢迎试用 Rafy 领域实体框架,框架发布地址:http://www.cnblogs.com/zgynhqf/p/3356692.html。
Rafy 领域实体框架演示(3) - 快速使用 C/S 架构部署的更多相关文章
- Rafy 领域实体框架演示(4) - 使用本地文件型数据库 SQLCE 绿色部署
本系列演示如何使用 Rafy 领域实体框架快速转换一个传统的三层应用程序,并展示转换完成后,Rafy 带来的新功能. <福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!> ...
- Rafy 领域实体框架演示(2) - 新功能展示
本文的演示需要先完成上一篇文章中的演示:<Rafy 领域实体框架示例(1) - 转换传统三层应用程序>.在完成改造传统的三层系统之后,本文将讲解使用 Rafy 实体框架后带来的一些常用功能 ...
- Rafy 领域实体框架示例(1) - 转换传统三层应用程序
Rafy 领域实体框架发布后,虽然有帮助文档,许多朋友还是反映学习起来比较复杂,希望能开发一个示例程序,展示如何使用 Rafy 领域实体框架所以,本文通过使用 Rafy 领域实体框架来改造一个传统的三 ...
- Rafy 领域实体框架简介
按照最新的功能,更新了最新版的<Rafy 领域实体框架的介绍>,内容如下: 本文包含以下章节: 简介 特点 优势 简介 Rafy 领域实体框架是一个轻量级 ORM 框架. 与一般的 ORM ...
- Rafy 领域实体框架 - 公司内部培训视频
本月给公司内部一个项目做架构重构,其中使用到了 Rafy 框架.所以我培训了 Rafy 领域实体框架的使用方法,过程中录制了视频,方便其他同事查看.现在把视频放到园里来分享下,有兴趣的朋友可以看看,有 ...
- Rafy 领域实体框架 - 树型实体功能(自关联表)
在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解. 场景 在开发数据库应用程序时,往往会遇到自关联表的场景.例如,分类信息.组织架构中的部门.文件夹信息等,都 ...
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...
- Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案
去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为 ...
- 福利到!Rafy(原OEA)领域实体框架 2.22.2067 发布!
距离“上次框架完整发布”已经过去了一年半了,应群中的朋友要求,决定在国庆放假之际,把最新的框架发布出来,并把帮助文档整理出来,这样可以方便大家快速上手. 发布内容 注意,本次发布,只包含 Rafy ...
随机推荐
- poj1200-Crazy Search(hash入门经典)
Hash:一般是一个整数.就是说通过某种算法,可以把一个字符串"压缩" 成一个整数.一,题意: 给出两个数n,nc,并给出一个由nc种字符组成的字符串.求这个字符串中长度为n的不同 ...
- 通过jquery js 实现幻灯片切换轮播效果
观察各个电商网址轮播图的效果,总结了一下主要突破点与难点 1.->封装函数的步骤与具体实现 2->this关键字的指向 3->jquery js函数熟练运用 如animate 4-& ...
- 解读ASP.NET 5 & MVC6系列(7):依赖注入
在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程 ...
- Mac OS X上IntelliJ IDEA 13与Tomcat 8的Java Web开发环境搭建
这标题实在有点拗口,不知道怎么写好,但看了标题也就明白文本的内容.最近几天在折腾这些玩意儿,所以写写总结.除了环境搭建,本文还是一篇入门级的上手教程. 去下载一些东西 JDK安装 Tomcat安装 T ...
- 你真的会用java replaceAll函数吗?
replace.replaceAll.replaceFirst这三个函数会java的同学估计都用过,笔者已经用了2年多,可是,我们真的懂他们吗? 概述一下他们三个的用法: · replace(Char ...
- Chrome 控制台新玩法-console显示图片以及为文字加样式
有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.lo ...
- bootstrap-popover的配置与灵活应用
首先罗列一下配置参数: 1.animation true/false 是否动画 2.placement 'right'/'left'/top/bottom/function(){return 'rig ...
- 循序渐进,了解Hive是什么!
一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识.那么,一般对陌生事物的认知都会经历下面几个阶段: 为什么会出现?解决了什么问题? 如何搭建?如何 ...
- Chrome开发者工具不完全指南(五、移动篇)
前面介绍了Chrome开发者工具的大部分内容工具,现在介绍最后两块功能Audits和Console面板.一.Audits Audits面板会针对目前网页提出若干条优化的建议,这些建议分为两大类,一类是 ...
- fir.im Weekly - TouchBar 从入门到开发
自从 Macbook Pro 发布重大更新, TouchBar 一直是开发者的重点关注对象.除了NSTouchBar官方文档,速度快者如 @毫无存在感的Cee,分享了一篇 NSTouchBar 的入门 ...