メインコンテンツへスキップ
このトピックは Windows 版 FRE に適用されます。
サーバーアプリケーションで ABBYY FineReader Engine を使用する場合は、いくつか特有の注意点があります。
  • 1 つのプロセス内の複数のスレッドで、複数の独立したリクエストを同時に処理する必要があります
  • Engine は、高性能なマルチ CPU コンピューター上で動作するサーバーオペレーティングシステム上で実行されます
  • 特別なアカウント (Network Service、Local Service、ASPNET) で使用します
ABBYY FineReader Engine 12 の開発では、上記の特性が考慮され、サーバープロセスの一部として、または個別のプロセス内で、スレッドセーフな FineReader Engine オブジェクトを取得できる機能が API に組み込まれました。FineReader Engine を複数のプロセスで使用すると、同時に動作するオブジェクトのプールを作成し、サーバーコンピューターの CPU 性能を最大限に活用できます。これは、ほとんどのサーバー利用シナリオで最適なアプローチです。

Engine object をサーバーアプリケーションに読み込む

サーバーアプリケーションに Engine を読み込む最適なメソッドは、COM を介してアウトプロセスサーバーとして別プロセスに読み込むことです。このメソッドでは、マルチスレッドに関する問題がすべて自動的に解消されます。ABBYY FineReader Engine オブジェクトに対するすべての操作は COM によってシリアル化されるため、複数のプロセスに複数の Engine インスタンスを作成し、サーバープロセス内からそれらを同時に使用できます。また、このメソッドは簡単に利用できます。Engine オブジェクトは、IEngineLoader インターフェイスを実装する OutprocLoader オブジェクトを使用して読み込まれます。
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// Engine を別プロセスで取得しました
try {
 ...
} finally {
 engineLoader.ExplicitlyUnload(); // 不要になった時点でアンロードできます
}
ただし、このメソッドには重要な欠点が 1 つあります。特別なアカウントで使用する場合、そのようなアカウントで OutprocLoader を実行するための権限が必要になることがあります。ただし、FREngine.dll を登録する必要がある点も含め、これはサーバー製品ではそれほど大きな問題ではありません。通常、サーバーアプリケーションは少数のコンピューターに、経験豊富な管理者によってインストールされるためです。
  • アカウント権限は、DCOM Config ユーティリティを使用して設定できます (コマンドラインで DCOMCNFG と入力するか、[コントロール パネル] > [管理ツール] > [コンポーネント サービス] を選択します) 。コンソールツリーで [コンポーネント サービス] > [コンピューター] > [マイ コンピューター] > [DCOM Config] フォルダーを見つけ、ABBYY FineReader Engine 12.5 Loader (Local Server) を右クリックして [Properties] をクリックします。ダイアログが開いたら、[Security] タブをクリックします。[Launch Permissions] で [Customize] をクリックし、次に [Edit] をクリックして、そのアプリケーションを起動できるアカウントを指定します。
64 ビット オペレーティング システムでは、登録された DCOM アプリケーションは 32 ビットの MMC コンソールで使用できます。このコンソールは次のコマンドラインを使用して起動できます。
"mmc comexp.msc /32"
  • エンドユーザーのコンピューターにアプリケーションをインストールする際に FREngine.dll を登録するには、regsvr32 ユーティリティを使用します。64 ビット オペレーティング システムを使用している場合、既定では regsvr32 の 64 ビット版が実行されます。次のコマンドラインを使用します。
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
  • サーバー アプリケーションのデバッグ時と実行時の両方で、Network ライセンスを使用することをお勧めします。
さらに、IHostProcessControl インターフェイスを使用すると、ホスト プロセスの優先度を管理し、その稼働状態を制御できます。 ABBYY FineReader Engine を読み込む方法はほかにもあります。ただし、これらの方法には、サーバー アプリケーションでの使用を大きく制限する特性があります。
  • ABBYY FineReader Engine は、現在のプロセス内で in-process server として COM を介して読み込むことができます。この方法では、マルチスレッドに関する問題も自動的に解消されます (ABBYY FineReader Engine オブジェクトに対するすべての操作は COM によって直列化されます) 。また、使用も簡単です。ただし、この方法では Engine object の複数のインスタンスを使った同時処理を構成できないため、サーバーのパフォーマンスが大きく制限されます。この方法のもう 1 つの欠点は、エンド ユーザーのコンピューターにアプリケーションをインストールする際に、FREngine.dll の登録が必要になることです。
  • FREngine.dll は手動で読み込むこともできます。これはライブラリを読み込む標準的な方法です。この方法では、Engine object に対するすべての操作を、Engine object が初期化されたのと同じスレッド内で実行する必要があります。また、1 つのプロセスにつき初期化できる Engine object は 1 つだけです。そのため、サーバーのパフォーマンスが大きく制限されます。この理由から、この方法の使用は推奨しません。この方法の利点の 1 つは、エンド ユーザーのコンピューターにアプリケーションをインストールする際に、FREngine.dll の登録が不要なことです。
ABBYY FineReader Engine で使用できる 3 つの読み込み方法の詳細については、Engine object を読み込むさまざまな方法 を参照してください。

サンプル

EnginesPool のコード サンプルでは、マルチスレッド アプリケーションにおけるプロセッサ プールの実装例を紹介しており、このサンプルをニーズに合わせて変更することで、独自のアプリケーション開発を開始できます。

関連項目

Engine Object を読み込むさまざまな方法