Zum Hauptinhalt springen
Dieses Thema gilt für FRE unter Windows.
Die Verwendung von ABBYY FineReader Engine in Serveranwendungen hat einige Besonderheiten:
  • Mehrere unabhängige Anfragen müssen gleichzeitig in mehreren Threads innerhalb eines Prozesses verarbeitet werden.
  • die Engine läuft unter einem Serverbetriebssystem auf einem leistungsstarken Computer mit mehreren CPUs
  • Verwendung mit speziellen Konten (Network Service, Local Service, ASPNET)
Bei der Entwicklung von ABBYY FineReader Engine 12 wurden die oben genannten Besonderheiten berücksichtigt. Deshalb wurden in die API Funktionen integriert, mit denen Sie threadsichere FineReader Engine-Objekte innerhalb eines Serverprozesses oder in separaten Prozessen verwenden können. Durch die Verwendung von FineReader Engine in mehreren Prozessen können Sie einen Pool von Objekten erstellen, die gleichzeitig arbeiten und die volle CPU-Leistung des Servers nutzen. Dies ist in den meisten Serverszenarien der optimale Ansatz.

Laden des Engine-Objekts in eine Serveranwendung

Am besten laden Sie die Engine per COM als Out-of-Process-Server in einen separaten Prozess in eine Serveranwendung. Mit dieser Methode werden alle Schwierigkeiten im Zusammenhang mit Multithreading automatisch vermieden: Sämtliche Operationen mit den Objekten von ABBYY FineReader Engine werden per COM serialisiert. Dadurch können Sie mehrere Engine-Instanzen in mehreren Prozessen erstellen und vom Serverprozess aus gleichzeitig mit ihnen arbeiten. Gleichzeitig ist diese Methode einfach anzuwenden. Das Engine-Objekt wird mithilfe des Objekts OutprocLoader geladen, das die Schnittstelle IEngineLoader implementiert.
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// Die Engine wurde in einem separaten Prozess geladen
try {
 ...
} finally {
 engineLoader.ExplicitlyUnload(); // Kann entladen werden, wenn sie nicht mehr benötigt wird
}
Diese Methode hat jedoch einen wesentlichen Nachteil. Wenn sie mit speziellen Konten verwendet wird, sind unter Umständen Berechtigungen erforderlich, um OutprocLoader für diese Konten auszuführen. Dies und die Notwendigkeit, FREngine.dll zu registrieren, sind bei Serverprodukten jedoch nicht besonders problematisch, da Serveranwendungen in der Regel von erfahrenen Administratoren auf wenigen Computern installiert werden.
  • Kontoberechtigungen können mit dem Dienstprogramm DCOM Config eingerichtet werden (geben Sie entweder DCOMCNFG in der Befehlszeile ein oder wählen Sie Systemsteuerung > Verwaltung > Komponentendienste). Suchen Sie in der Konsolenstruktur den Ordner Component Services > Computers > My Computer > DCOM Config, klicken Sie mit der rechten Maustaste auf ABBYY FineReader Engine 12.5 Loader (Local Server), und klicken Sie auf Properties. Daraufhin wird ein Dialogfeld geöffnet. Klicken Sie auf die Registerkarte Security. Klicken Sie unter Launch Permissions auf Customize und dann auf Edit, um die Konten anzugeben, die die Anwendung starten dürfen.
Beachten Sie, dass auf einem 64-Bit-Betriebssystem die registrierte DCOM-Anwendung in der 32-Bit-MMC-Konsole verfügbar ist, die mit der folgenden Befehlszeile ausgeführt werden kann:
"mmc comexp.msc /32"
  • Um FREngine.dll bei der Installation Ihrer Anwendung auf dem Computer eines Endbenutzers zu registrieren, verwenden Sie das Dienstprogramm regsvr32. Wenn Sie ein 64-Bit-Betriebssystem verwenden, wird standardmäßig die 64-Bit-Version von regsvr32 ausgeführt. Verwenden Sie die folgende Befehlszeile:
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
  • Wir empfehlen, sowohl zum Debuggen Ihrer Serveranwendung als auch für ihren Betrieb eine Netzwerklizenz zu verwenden.
Außerdem können Sie über die Schnittstelle IHostProcessControl die Priorität eines Hostprozesses verwalten und steuern, ob er aktiv ist. Es gibt auch andere Methoden, ABBYY FineReader Engine zu laden. Diese haben jedoch bestimmte Eigenschaften, die ihre Verwendung in Serveranwendungen erheblich einschränken.
  • ABBYY FineReader Engine kann über COM als In-Process-Server innerhalb des aktuellen Prozesses geladen werden. Diese Methode beseitigt außerdem automatisch alle mit Multithreading verbundenen Schwierigkeiten (alle Operationen mit den Objekten von ABBYY FineReader Engine werden über COM serialisiert) und ist einfach zu verwenden. Sie erlaubt jedoch keine gleichzeitige Verarbeitung mit mehreren Instanzen des Engine-Objekts, was die Leistung des Servers in vielerlei Hinsicht einschränkt. Ein weiterer Nachteil dieser Methode besteht darin, dass bei der Installation der Anwendung auf dem Computer eines Endbenutzers FREngine.dll registriert werden muss.
  • FREngine.dll kann manuell geladen werden. Dies ist die Standardmethode zum Laden der Bibliothek. Bei dieser Methode müssen alle Operationen mit dem Engine-Objekt in demselben Thread ausgeführt werden, in dem das Engine-Objekt initialisiert wurde. Außerdem kann pro Prozess nicht mehr als ein Engine-Objekt initialisiert werden. Dies schränkt die Leistung des Servers erheblich ein. Aus diesem Grund empfehlen wir diese Methode nicht. Ein Vorteil dieser Methode besteht darin, dass bei der Installation der Anwendung auf dem Computer eines Endbenutzers keine Registrierung von FREngine.dll erforderlich ist.
Ausführliche Beschreibungen der drei in ABBYY FineReader Engine verfügbaren Lademethoden finden Sie unter Different Ways to Load the Engine Object.

Beispiele

Das Codebeispiel EnginesPool enthält eine Implementierung eines Prozessor-Pools für eine Multithread-Anwendung, und Sie können mit der Entwicklung Ihrer eigenen Anwendung beginnen, indem Sie dieses Beispiel an Ihre Anforderungen anpassen.

Siehe auch

Unterschiedliche Möglichkeiten zum Laden des Engine-Objekts