DataSnap 伺服器端可以設定的過濾器(Filter)有:
- PC1 加密過濾器
- RSA 加密過濾器
- ZLIB 壓縮過濾器
伺服器端設定後,客戶端也需要進行相同設定,否則便無法使用。僅設定單一過濾器時,此時客戶端可以正確連線。
問題 1 : Illegal argument
Client IDE 設定連線以及 Zlib 過濾器 (Filter) 後,於執行時期 (RunTime) 當下會出現 Illegal argument 例外訊息,看完這個訊息仍舊不知道如何修正。
問題 2 : Connection Closed Gracefully
在設定複數過濾器,如 PC1 + ZLIB 後,設定時期使用客戶端的 IDE 連線到 DS Server 時,會出現【Connection Closed Gracefully】錯誤。
但在 Run-Time 執行時期則可以正常連線。
原因
- 客戶端設定 ZLIB 過濾器後,並未主動替我們加入對應單元,進而導致執行時期發生錯誤。
- Bob Swart 當時指出需要 SSL 加解密函式庫,但事實並非如此,就算將 libeay32.dll 和 ssleay32.dll 複製到可能被執行的資料夾仍無法排除此錯誤;熱心網友在追查後發現此為 Delphi IDE BUG:只要設定複數過濾器即會發生此錯誤。
解決方式
- 客戶端必須手動 uses DBXCompressionFilter 單元。
- 在 XE1 時就有推出 Update Fix 修正此問題。
- 使用 RSA 加密時,伺服器端和客戶端各自都必須使用 libeay32.dll 和 ssleay32.dll 兩個檔案;但 PC1 則不需要。
- 過濾器設定上,客戶端順序要和伺服器端相反,例如伺服器端若是 Zlib ➜ RSA or PC1 (Eden: 先壓縮再加密),則客戶端就必須反向設定 RSA or PC1 ➜ Zlib (Eden: 先解密再解壓縮)
和你分享 ❤️
沒有留言:
張貼留言