2017/10/08

Forever without restarting IIS - ISAPI Loader



Eggcentric ISAPI Loader is update the ISAPI dll solution.

Update your ISAPI DLL while in USE and without restarting IIS!!

I have a name is "ZooISAPI.dll" in ISAPI DLL.

How to use?

Step 1: Rename "ZooISAPI.dll" to "ZooISAPI.run"


Step 2: Copy "ISAPILoader_NODEBUG.dll" or "ISAPILoader_DEBUG.dll" to same path.

Step 3: The file rename to "ZooISAPI.dll"
This time, run the ISAPI path (Original the ZooISAPI.dll), you could get ZooISAPI.run works.

Step 4: When update ISAPI dll. Rename the new version "ZooISAPI.dll" to "ZooISAPI.update", and  move to IIS ISAPI path.
Step 5: Sleep(10000);   :P


Step finish: The ISAPI Loader will unload the .run and rename it to .backup and then rename the .update to .run and then load the .run
Yeah!! Update our ISAPI DLL while in USE and without restarting IIS, forever!!




See also:

2017/10/01

DBX framework 初探 (二) - In FireDAC


上回介紹了 DBX framework 的好處,我們來看看實作的程式碼:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := SQLConnection1.DBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;

由上面的原始碼可以看出,DBX framework 是建立在 dbExpress 上,但 FireDAC 的 TFDConnection 沒有內建 DBX framework,難道魚和熊掌不可兼得嗎?


當然可以!


FireDAC 是個海納百川的元件組 (雖然我對它沒有愛),和 dbExpress 結合倒也不是件難事。

使用的元件組是:
  • TFDConnection.
  • TFDPhysTDBXDriverLink.

FireDAC 的連線精靈很方便,只需注意:
  • Driver ID = TDBX (DBX4) or DBX (DBX v1~v3)
  • DriverName = 參考 dbExpress 區的 Driver Name (如 MSSQL、IBLite 等)

若有購買 dbExpress 3rd driver,在 FireDAC 包裝下,可以直接使用 TFDQuery,再也不用 TSQLQuery, TDataSetProvider, TClientDataSet 三個元件、三個步驟了。
































哎呀,被你發現還有後續內容啦。


FDConnection 包裝 dbExpress 後,利用 TFDCustomConnection.CliObj,DBX 元件組便可以利用它,再透過轉型的方式重現。


CliObj = Call Level Interface Object. (白話文是:切到【手動排檔】模式)


它的包裝單元很豐富,表格如下:

Driver  Wrapping class and unit 
Advantage  TFDSConnection, FireDAC.Phys.ADSWrapper.pas 
dbExpress (v <= 3)  ISQLConnection 
InterBase, Firebird  TIBDatabase, FireDAC.Phys.IBWrapper.pas 
MySQL  TMySQLSession, FireDAC.Phys.MySQLWrapper.pas 
Microsoft SQL Server  TODBCConnection, FireDAC.Phys.ODBCWrapper.pas 
Microsoft Access TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
IBM DB2 TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Sybase SQL Anywhere TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
ODBC TODBCConnection, FireDAC.Phys.ODBCWrapper.pas
Oracle TOCIService, FireDAC.Phys.OracleWrapper.pas 
PostgreSQL  TPgConnection, FireDAC.Phys.PgWrapper.pas 
SQLite  TSQLiteDatabase, FireDAC.Phys.SQLiteWrapper.pas 
TDBX (v >= 4)  TDBXConnection, FireDAC.Phys.TDBX.pas 
DataSnap TDBXConnection, FireDAC.Phys.TDBX.pas
MongoDB TMongoConnection, FireDAC.Phys.MongoDBWrapper.pas


之後只要改一行文字即可,如以下紅字內容:


var
  LDBXConn: TDBXConnection;
  LCmd: TDBXCommand;
  LReader: TDBXReader;
begin
  LDBXConn := TObject(FDConnection1.CliObj) as TDBXConnection;
  LCmd := LDBXConn.CreateCommand;
  LCmd.Text := 'SELECT * FROM employee';
  LReader := LCmd.ExecuteQuery;
  ...
  LCmd.Close;
  LCmd.Free;
end;


警告:效能控請小心服用!


結語:
DBX framework 打從問市以來一直在傳達「以貼近底層的方式發揮程式最大效能」的概念。

但現實的程式設計市場是以【包裝便利】取勝。


從多數 Delpher 對 BDE、ADO 至死不渝,可以看出 Delphi 市場的真實偏好。
官方 FireDAC 的出現,可以看出 Delphi 對市場的妥協。



好的產品不一定賣,會賣的一定是對消費者有價值的產品。


對我們來說,能夠簡化工作量的才是有價值的工具。
在 DBX framework 是加重工作量,而 FireDAC 能簡化開發工作量,對多數的 Delphier 來說,這才是有價值的。

同樣是開發產品的我們,DBX framework 歷史教訓值得學習 ── 要做有價值的產品。

然而,DBX framework 所帶來架構設計上的轉變是不容忽視的,秘密就在……




文內表格裡的彩蛋,您發現了嗎?




See also: