使用delphi 开发多层应用(一)C/S系统的扩展

   在讨论多层开发前,先谈一下老的C/S 程序。

     几个月前,我的一个朋友找我,说是我以前给他做的一个系统,原来是在局域网的运行的,现在有两个校区,另外一个校区也想使用,

两个校区都可以上互联网,让想办法解决。我去看了一下,是我10年前给开发的c/s 系统,源代码早都不见了。我说可以按现在的模式

重新开发一套,但是需要时间和money.朋友要求一周内就要解决,同时认为系统现有的功能已经足够了,而且系统非常稳定,他们已经习惯操作了,

没有必要再开发了。看现有的条件下如何快速、安全的实现两个校区的联网运行。没有了源代码,只能通过网络来解决这个问题,可以把数据库服务器

IP直接设为公网IP,远程直接访问。但是这是一个愚蠢的做法,因为直接把数据库暴露在互联网上,估计不出一天服务器就完蛋了(同时系统传输的数据随时都可以被黑客或木马嗅探)。

所以必须使用硬件VPN办法解决这个问题了。还好现在有非常便宜的VPN 设备(大概就是1000-2000元)。我们一天就实现了系统的扩展。

                            系统网络拓扑图如下:

 

     当然还有一种解决方法就是利用windows 的vpn 功能,服务器端需要一台windows VPN 服务器,客户端需要运行程序时,先进行

VPN 拨号,然后就可以使用了,当然为了保证windows 服务器自身的安全,必须安装或开启防火墙功能。

    这种系统的网络拓扑图如下:

      

 

  以上两个办法由于不用改动源代码,因此理论上适合任何C/S 系统程序。

     当然如果有源代码的话,我们可以更加灵活的实现以上功能,当然前提条件是对系统功能不产生任何改变。

这里我们要使用SSH建立安全连接,SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

建立连接后,再使用端口转发功能,把远程数据库监听端口,映射到本地服务器或本机上,实现安全访问数据库服务器。

delphi 里面可以使用Devart 的 SecureBridge实现以上功能。

            其工作网络拓扑图如下:

   

上图是把远程服务器的端口映射到本地服务器上,为了简单,下面以把端口映射到本机为例,介绍一下实现方法。

 

首先在客户端系统的dadamodule 模块里面 先要增加三个控件

 

    sserver: TScSSHClient;
    sch: TScSSHChannel;
    ScRegStorage1: TScRegStorage;

 

 首先databse 的server 要设为本机,即127.0.0.1.

 

     

再设置TScSSHClient 的属性,使其可以访问到远程的ssh 服务器。

主要设置 ssh 服务器的hostname,port,username,password 和keystorage.

keystorage  用来在客户端保存以上的登录信息和远程ssh 服务器的公匙。

如果远程服务器设置好的话,就可以直接设置connected  为True,并与远程SSH 服务器建立连接。

最后就是建立隧道,实现端口转发。

 

这个用来设置将远程数据库服务器192.168.10.254 的1521端口(oralce 的监听端口)映射到

本地的1521 上,就像oracle 安装在本地了(呵呵,欺骗一下客户端)。

到现在为止,我们就设置好了一切,开始运行客户端,就可以安全访问远程的数据库了。

 

以上三种方式介绍了老的C/S 系统访问远程数据库的方法,适合一下几种情况:

   1.原来的系统运行稳定,功能不需要再增加;

   2.时间来不及改造旧的系统;

   3.每次访问的数据量不能太大(因为数据要经过互联网,当然多层系统也存在这个问题);

   4.客户端不是对外开放的,客户端数量可控。

 

总之,虽然多层系统有很多优点(后面会陆续介绍),但是C/S 系统也有自己的一些不可替代的优点,

没有最好的系统架构,只有最适合的系统架构。如果C/S 可以用、够用的话,我们就让它发挥最后余热吧。

 

 

 

 

时间: 2024-08-20 11:33:39

使用delphi 开发多层应用(一)C/S系统的扩展的相关文章

使用delphi 开发多层应用(三)Delphi常用多层框架介绍

    目前在delphi 开发多层应用的框架基本上集中在以下几种,每种开发框架都有自己的优缺点,没有最好的,大家可以根据 自己的实际需求选择相应框架,我把我本人在使用几种框架的体会与大家分享一下.如有不对之处,可以拍砖.      1. DELPHI 自身提供的DataSnap       从delphi 3 开始,delphi 自身就开始支持多层开发,后期的版本逐步加强三层开发功能,在delphi 6 以后, 把这一功能叫Datasnap,并且每个都有很多变化,包括DBExpress 的数据

使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库

     delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持访问kbmmw 的web 服务器, 并完美的通过JSON支持使用kbmmw 的JSON 数据格式.使我们非常方便的在win32,win64,mac os,ios 和android 上访问kbmmw 的数据库.     首先我们建立一个可以返回JSON 的kbmmw web 服务器.这个可以

使用delphi 开发多层应用(四)kbmMW 的安装与配置

更新至kbmmw 5.04.  (2017.12.14) --------------------- 目前的KbmMW 最新版是4.0 beta 版,它支持最新的delphi XE2 ,同时支持win32,win64,mac osx的编译开发. 增加了原生的JSON 的支持(看来JSON 是越来越热了:)),同时提高了http web 的功能,作者已经用最新的KbmMW 替换了 原来使用aspx 的下载网站,其使用kbmMW 的web服务,并使用AJAX 来实现数据列表,经过我的使用,效果还不错

使用delphi 开发多层应用(十三)使用Basic4android 直接访问kbmMW server

 由于目前delphi xe2 还不直接支持Android 的开发,因此kbmMW 客户端的功能也没办法直接在Android 上运行. 由于kbmMW 为了与java 应用程序通讯,在企业版里面提供了一个JavaClinet. 具体文件名为kbmMWClient.jar. 而在basci4android 可以直接使用这个jar. 也就是说通过kbmMW 的javaclient 可以直接访问kbmMW 的服务器. 当然由于客户端没有kbmMemTable的功能,一次只能是访问远程服务过程,无法直接

使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器

      随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提供了C 的客户端,可以使用xcode连接 kbmmw的C 客户端来访问kbmmw 服务器,但是功能有限,而且要熟悉xcode),对于急着想在ios 使用kbmmw 服务的同学,可以先使用kbmmw 的webservice 方式访问kbmmw 服务器.   下面我就介绍以下如何在ios 访

使用delphi 开发多层应用(七)简单的kbmMW多层数据库访问服务

      刚写完几个多层的例子,本来准备再写点其他稍微复杂的例子,很多同学就问数据库访问的方法,既然这样,就先写一下 数据库访问的过程与方法.kbmMW 支持很多数据库访问方式和控件,前面在安装时已经说过了.由于delphi 已经在d7 以后 不再推荐使用其传统的数据库方式BDE了,尤其是在delphi XE2 由于支持win64, 已经不支持使用BDE 了,为了演示方便,本文 后台数据库选择使用完全免费的firebird.firebird 是一个非常短小精悍的关系数据库,支持存储过程.触发器

使用delphi 开发多层应用(十一)使用kbmMW 开发webserver

用kbmMW 开发webserver也是非常方便的. 还是以前面的简单服务器为基础,我们先要通过kbmMW的service wizard 来建立web 服务. 如图,先选择web server service 点下一步,出现选择文件目录的界面 我们这里用webfiles 相对路径,就是在网页文件放到可执行文件目录下的webfiles 目录. 点下一步,出现输入服务名的界面,注意这里的服务名必须是HTTPSERVICE. 后面的基本上就和其他服务类似了,可以一路点下去了.然后就生成对应的服务器代码

使用delphi 开发多层应用(九)客户端使用事务更新多个表数据到kbmMW服务器

  上次说明了客户端如何把变化的数据更新到服务器端,但是在实际应用中,往往是要同时更新若干个表, 为了保证逻辑上一致,这些表的操作要么都一次成功,要么全部失败,这就需要使用事务处理.我们今天 就来说一下,怎么在kbmMW中实现事务处理.同时也顺便讲一下kbmMW 里面命名查询(named query)的 使用,首先我们打开服务器端,在数据服务上增加一个TkbmMWIBDACQuery,如图 设置它的connctionpool 为Form1.kbmMWIBDACConnectionPool1 re

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

  从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍.   要做一个认证管理,大概分为以下5步:        1.  定义你要保护的资源,一般是服务.函数,当然你只要不限麻烦,可以是任何东西:        2.  定义使用者(用户):        3.  定义角色,使用者通过角色与服务器打交道:        4.  定义角色或用户可以访问的资源(授权):        5. 定义认证与登录的限制(本步不是必须的