在伺服器應用程式中使用 ABBYY FineReader Engine 有若干特殊考量:
- 必須在單一處理序的多個執行緒中同時處理多個獨立請求
- Engine 在高效能多 CPU 電腦上的伺服器作業系統下執行
- 需搭配特殊帳戶使用 (Network Service、Local Service、ASPNET)
在開發 ABBYY FineReader Engine 12 時,上述特殊考量均已納入設計,API 中亦提供了相應工具,讓您能夠在伺服器處理序內或獨立處理序中取得執行緒安全的 FineReader Engine 物件。在多個處理序中使用 FineReader Engine,可讓您建立物件集區,使這些物件並行運作,充分發揮伺服器電腦的 CPU 效能。這是大多數伺服器情境下的最佳做法。
將 Engine 載入伺服器應用程式的最佳方式,是透過 COM 以跨處理序伺服器的形式將其載入獨立的處理序中。此方法可自動消除所有與多執行緒相關的問題:對 ABBYY FineReader Engine 物件的所有操作均透過 COM 進行序列化,讓您能夠在多個處理序中建立多個 Engine 實例,並從伺服器處理序內同時操作它們。此外,此方法也易於使用。Engine 物件透過 OutprocLoader 物件載入,該物件實作了 IEngineLoader 介面。
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// 我們已在獨立的處理序中取得 Engine
try {
...
} finally {
engineLoader.ExplicitlyUnload(); // 不再需要時可將其卸載
}
然而,此方法有一個重要的缺點。在搭配特殊帳戶使用時,可能需要相應的權限才能為這些帳戶執行 OutprocLoader。不過,此問題以及需要註冊 FREngine.dll 的需求,在伺服器產品中並不特別關鍵,因為伺服器應用程式通常由經驗豐富的管理員安裝在少數幾台電腦上。
- 帳戶權限可使用 DCOM Config 公用程式進行設定 (在命令列中輸入 DCOMCNFG,或選取「控制台」>「系統管理工具」>「元件服務」) 。在主控台樹狀目錄中,找到「元件服務」>「電腦」>「我的電腦」>「DCOM 設定」資料夾,以滑鼠右鍵按一下「ABBYY FineReader Engine 12.5 Loader (Local Server)」,然後按一下「內容」。此時將開啟一個對話方塊。按一下「安全性」索引標籤。在「啟動權限」下,按一下「自訂」,然後按一下「編輯」以指定可啟動應用程式的帳戶。
請注意,在 64 位元作業系統上,已註冊的 DCOM 應用程式可在 32 位元 MMC 主控台中使用,可透過以下命令列執行:
- 若要在終端使用者電腦上安裝應用程式時註冊 FREngine.dll,請使用 regsvr32 工具。若您使用的是 64 位元作業系統,預設會執行 64 位元版本的 regsvr32。請使用以下命令列:
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
- 我們建議您在偵錯伺服器應用程式及執行時,均使用 Network 授權。
此外,您可以透過 IHostProcessControl 介面管理 host process 的優先順序,並控制其是否持續運作。
載入 ABBYY FineReader Engine 的其他方式同樣可用,但這些方式具有某些特性,會大幅限制其在伺服器應用程式中的適用性。
- ABBYY FineReader Engine 可透過 COM,以同處理序伺服器的方式在目前的處理序中載入。此方法同樣能自動消除所有多執行緒相關的問題 (對 ABBYY FineReader Engine 物件的所有操作均透過 COM 序列化) ,且易於使用。然而,此方法不支援使用多個 Engine object 實例進行同步處理,這在很大程度上限制了伺服器效能。此方法的另一個缺點是,在終端使用者的電腦上安裝應用程式時,需要註冊 FREngine.dll。
- FREngine.dll 可手動載入。這是載入程式庫的標準方法。此方法要求對 Engine object 的所有操作,必須在初始化 Engine object 的同一執行緒中執行。此外,每個處理序最多只能初始化一個 Engine object,這大幅限制了伺服器效能。因此,我們不建議使用此方法。此方法的優點在於,在終端使用者的電腦上安裝應用程式時,無需註冊 FREngine.dll。
如需 ABBYY FineReader Engine 三種載入方法的詳細說明,請參閱載入 Engine Object 的不同方式。
EnginesPool 程式碼範例示範了如何在多執行緒應用程式中實作處理器池,您可以透過修改此範例來開發符合需求的應用程式。
載入 Engine Object 的不同方式