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 ...
随机推荐
- js表达式与语句的区别
http://www.2ality.com/2012/09/expressions-vs-statements.html http://www.jb51.net/article/31298.htm 表 ...
- 公司内部培训SQL Server传统索引结构PPT分享
公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...
- Asp.Net Core 发布和部署(Linux + Jexus )
前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在 asp.net core 中对我们的已经完成的程序进行发布和部署. 有关如何使用 Nginx 进行部署, ...
- 实战JS正则表达式
-正则表达式是一种文本模式的匹配工具. -文章导读: --1.正则对象的属性和方法 --2.字符串对象的方法 --3.使用正则表达式: ---3.1 给字符串加上千分符 ---3.2 字符串中出现次数 ...
- MySQL 游标
概述 本章节介绍使用游标来批量进行表操作,包括批量添加索引.批量添加字段等.如果对存储过程.变量定义.预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇 ...
- [ASP.NET Web API]如何Host定义在独立程序集中的Controller
通过<ASP.NET Web API的Controller是如何被创建的?>的介绍我们知道默认ASP.NET Web API在Self Host寄宿模式下用于解析程序集的Assemblie ...
- 关于分工的思考 (Thoughts on Division of Labor)
Did you ever have the feeling that adding people doesn't help in software development? Did you ever ...
- SQL Azure (18) 使用External Table实现垮库查询
<Windows Azure Platform 系列文章目录> 问题 1.我们在进行SQL Server开发的时候,经常会使用垮库查询.但是在默认情况下,使用Azure SQL Datab ...
- 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信
在工控测试系统中,经常需要使用到各类程控仪器,这些程控仪器通常具有GPIB.LAN.USB等硬件接口,计算机通过这些接口能够与其通信,从而实现自动测量.数据采集.数据分析和数据处理等操作.本文主要介绍 ...
- ASP.NET Web.config
分析: .NET Web 应用程序的配置信息(如最常用的设置ASP.Net Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中.当你通过VB.NET新 建 一个Web应用程序后,默认 ...