使用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 可以用、夠用的話,我們就讓它發揮最后余熱吧。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM