2021/03/23

DataSnap 開發前篇 - 架構選擇

作者:吳祐賓

HTTP persistent connection.svg
helix84 - own work, based on [1], 公有領域, 連結

 


開發多層應用程式時,第一關就是面對【多次連線】和【持續連線】的選擇,雖然網路一面倒向多次連線才是王道,但實際真的適合自己嗎?

What is Encryption in Delphi? (2)


DataSnap Server 有提供 PC1 加密過濾器,一開始什麼都用官方預設值,運作下沒有問題,但就是 Key 值都是固定,就來修改一下吧。

同步修改後運作也是正常,正常的測完後,就要來試試【如果伺服端和客戶端密碼不同時會跳出什麼錯誤】。

結果



居然仍能運作!



這就怪了,為什麼兩邊的 KEY 值不同卻能運作無誤?

在經過測試後,它會經過幾個單元:

  • DBXTransport
  • DBXEncryption

DBXEncryption.TPC1Cypher 類別裡有 Cypher / Decypher 加解密函式,就進行測試,才知道每對封包加密傳遞給對方時,KEY 也會在包在其中一同傳給對方,對方再使用該 KEY 進行封包解密,反之亦然。

簡單的說就是:用 KEY 搭配【相同】演算法解密該封包才能夠正確解密。

 

所以要知道正確的演算法才是關鍵,雖然只要是 Delphi 的應用程式就必定可以解開,但以 Delphi 這麼小眾的情形下也算得上一種良好的加密法則。(笑)

See also

2021/03/05

SQL SERVER 儲存 BLOB 檔案 BCP, CLR, OLE 功能差異


這一陣子遇到需要將 BLOB 欄位轉成實體檔案的需求,主要應用在發送電子郵件上,不查還好,一查也是水很深的技術問題。

 

前提:必須開啟 SQL SERVER 存取實體磁碟的權限

SQL SERVER 存取實體磁碟工作大多屬底層控制,而 DML 操作是在 Instance 下處理,並不會直接對實體磁碟控制,之前 SQL Injection 等資訊安全事件頻傳,為了安全性,SQL SERVER 對實體磁碟的控制選項預設值是關閉的,所以如果必須對實體磁碟控制,就必須先將其開啟。

文章目錄

2021/03/02

DataSnap Clinet 建立過濾器後連線出現 "Connection Closed Gracefully" 錯誤

本文為【ebook【Delphi跨平台資料庫程式設計火速上手】電子書出版 (CHT)】的補充教材。

DataSnap 伺服器端可以設定的過濾器(Filter)有:

  • PC1 加密過濾器
  • RSA 加密過濾器
  • ZLIB 壓縮過濾器

伺服器端設定後,客戶端也需要進行相同設定,否則便無法使用。僅設定單一過濾器時,此時客戶端可以正確連線。

2021/01/26

Delphi 母公司 Idera 買下 Apilayer

Apilayer 官網截圖

Marco Cantu 今天更新了他的 Blog,提到 EMBT 母公司 Idera 最近買下【Apilayer】公司,為 Idera 事業群增添了新血。

Apilayer 公司主要業務是【網路微服務 REST API】,範圍囊括了世界國家、國家地理位置反查等 REST API,類似【政府資料開放平臺】內容。

教學手冊置於文末 ❤️

Marco Cantu 也在他的 Blog 中展示如何使用 Delphi 操作 Apilayer API,提供了 Google 外另一個經濟實惠的選擇。

大匠和你分享。❤️❤️❤️

See also


2021/01/22

Delphi 經典案例分享 -- 『カラオケの鉄人』


 

「『カラオケの鉄人』店舗で、クーポン作成 - DTP並みの印刷システム実現の手法」

Embacadero 之前的研討會中,有一項吸引到大匠我的目光:

『カラオケの鉄人』店舗で、クーポン作成 - DTP並みの印刷システム実現の手法

製作【卡啦OK鐵人】的日本公司【株式会社鉄人化計画】是一間以卡啦OK為主要業務的上市公司,據點分佈在神奈川縣和千葉縣,共計超過 49 處營運據點。

簡報內容描述店家從【Linux + Kylix】升級成【jQuery + PHP + WebBroker + FireMonkey】跨 Web 和 跨行動裝置的移殖工作。

很多開發精華毫無保留地呈現,例如:

  • WebBroker CORS
  • JSON 和 BSON 
  • 桌面印刷(DTP) => 圖形輸出技巧
  • FMX + BARCODE

這份簡報顛覆了我對 Delphi Web 能力的三觀,內容非常精彩,值得一看再看!

相關資源收錄如下:

2021/01/21

【翻譯】DataSnap.ChatRoom Sample


 

原文網址:DataSnap.ChatRoom Sample
無責任翻譯:大匠之風 Eden Wu

 

DataSnap.ChatRoom Sample

展示如何以 DataSnap 建立簡單的【聊天室應用程式】。聊天室是利用 HTTP 技術進行公共和私人對話。

專案位置

你能夠在以下位置找到【聊天室】範例專案:

文章目錄

專案描述

聊天室應用程式會使用到:

  • 建立聊天室伺服器,其中管理員能夠控制使用者行為和發送公共訊息(廣播)。
  • 提供簡單方式使用 HTTP 網路介面,其中使用者能互相發訊息或交換公共訊息(廣播)。

如何使用範例

  1. 引導步驟為 Start | Programs | Embarcadero RAD Studio XE6 | Samples, 底下的 Object Pascal\DataSnap\ChatRoomDemo,然後開啟 ChatRoomServerProject.dproj.
  2. 編譯 ChatRoomServerProject.dproj.
  3. 在 IDE 中選擇 Run > Run 選項或按下 F9 來執行應用程式。
  4. 瀏覽到聊天室應用程式的機器,例如以下網址:http://mymachine.mydomain.net:8087/ChatRoom.htmlhttp://localhost:8087/ChatRoom.html
  5. 提供使用者名稱然後開始進行網路聊天。
  6. 管理員可以在聊天室伺服器應用程式踼除使用者或發送公共訊息。

Files 檔案群

檔案 內容

ChatRoomServerContainer

伺服器容器,搭載 DataSnap Server 元件。

ChatRoomServerMethodsUnit

伺服器函式容器,搭載聊天室範例中所使用到的伺服器函式。

ChatRoomServerProject

專案本身。

ChatRoomServerUnit

構成聊天室範例應用程式的使用者介面主表單。

Classes 類別

  • TUserNotifyThread implements a thread for broadcasting a message to all users, notifying them that a user has logged in or out.
  • TBootUserThread boots the user with the given name.
  • TChatRoomUser represents a single logged in user of the chat room. The ID of the user's session is held here, as logging in and out of the chat room is done by activing sessions with the server.
  • TChatRoomUsers is a singleton class for managing a list of logged in users.
  • TChatRoomServerMethods is declared inside the ChatRoomServerMethodsUnit.pas file and implements the server methods for the Chat Room application.

Procedural Types

  • TUIHookCallback is a no-argument procedure that will tell the user interface to update its user list.

Implementation

  • A TSQLConnection object provides the proxy DataSnap HTTP connection.
  • The Generate JS Proxy button generates the JavaScript proxy information though a TDSJavaScriptProxyWriter.
  • The main user interface contains a list of users and an edit box in which you can type in a message to broadcast to all users. The message you type in is wrapped into a JSON object. The list of users has a pop-up menu associated. This menu contains only one menu item used to throw the user out the chat.
  • The SendMessage and SendMessageToUser functions are used to send a message to all logged in users or to a single user.
  • The ChatRoomServerContainer.dfm form contains a chat room server (TDSServer component), a chat room transport (TDSTCPServerTransport component), a chat room HTTP service (TDSHTTPService component), a chat room authentication manager (TDSAuthenticationManager component), a chat room server class (TDSServerClass component), and a chat room file dispatcher (TDSHTTPServiceFileDispatcher component).

Uses

See Also