Passer au contenu principal
Cette rubrique s’applique à FRE pour Windows.
L’utilisation d’ABBYY FineReader Engine dans des applications serveur présente certaines spécificités :
  • plusieurs requêtes indépendantes doivent être traitées simultanément dans plusieurs threads au sein d’un même processus
  • l’Engine s’exécute sous un système d’exploitation serveur sur un ordinateur haute performance à plusieurs processeurs
  • utilisation avec des comptes spéciaux (Network Service, Local Service, ASPNET)
Lors du développement d’ABBYY FineReader Engine 12, ces spécificités ont été prises en compte et des outils ont été intégrés à l’API, permettant d’obtenir des objets FineReader Engine thread-safe dans le cadre d’un processus serveur ou dans des processus distincts. L’utilisation de FineReader Engine dans plusieurs processus permet de créer un pool d’objets fonctionnant simultanément et d’exploiter toute la puissance CPU de l’ordinateur serveur. Il s’agit de l’approche optimale dans la plupart des scénarios serveur.

Chargement de l’objet Engine dans une application serveur

La méthode optimale pour charger Engine dans une application serveur consiste à le charger via COM dans un processus distinct, en tant que serveur hors processus. Cette méthode élimine automatiquement toutes les difficultés liées au multithreading : toutes les opérations sur les objets ABBYY FineReader Engine sont sérialisées via COM, ce qui permet de créer plusieurs instances de Engine dans plusieurs processus et de les utiliser simultanément depuis le processus serveur. En outre, cette méthode est facile à utiliser. L’objet Engine est chargé à l’aide de l’objet OutprocLoader, qui implémente l’interface IEngineLoader.
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// Nous avons obtenu Engine dans un processus distinct
try {
 ...
} finally {
 engineLoader.ExplicitlyUnload(); // Nous pouvons le décharger lorsqu’il n’est plus nécessaire
}
Cette méthode présente toutefois un inconvénient important. Lorsqu’elle est utilisée avec des comptes spéciaux, des autorisations peuvent être nécessaires pour exécuter OutprocLoader avec ces comptes. Cependant, cela, ainsi que la nécessité d’enregistrer FREngine.dll, n’est pas vraiment critique dans les produits serveur, car les applications serveur sont généralement installées par des administrateurs expérimentés sur un petit nombre d’ordinateurs.
  • Les autorisations des comptes peuvent être configurées à l’aide de l’utilitaire DCOM Config (saisissez DCOMCNFG dans la ligne de commande ou sélectionnez Control Panel > Administrative Tools > Component Services). Dans l’arborescence de la console, localisez le dossier Component Services > Computers > My Computer > DCOM Config, cliquez avec le bouton droit sur ABBYY FineReader Engine 12.5 Loader (Local Server), puis cliquez sur Properties. Une boîte de dialogue s’ouvre. Cliquez sur l’onglet Security. Sous Launch Permissions, cliquez sur Customize, puis sur Edit pour spécifier les comptes autorisés à lancer l’application.
Notez que sur un système d’exploitation 64 bits, l’application DCOM enregistrée est disponible dans la console MMC 32 bits, qui peut être exécutée à l’aide de la ligne de commande suivante :
"mmc comexp.msc /32"
  • Pour enregistrer FREngine.dll lors de l’installation de votre application sur l’ordinateur d’un utilisateur final, utilisez l’utilitaire regsvr32. Si vous utilisez un système d’exploitation 64 bits, la version 64 bits de regsvr32 s’exécute par défaut. Utilisez la ligne de commande suivante :
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
  • Nous vous recommandons d’utiliser une licence réseau aussi bien pour déboguer votre application serveur que pour l’exécuter.
De plus, vous pouvez gérer la priorité d’un processus hôte et contrôler s’il est en cours d’exécution à l’aide de l’interface IHostProcessControl. D’autres méthodes de chargement d’ABBYY FineReader Engine sont également disponibles. Cependant, elles présentent certaines particularités qui limitent considérablement leur utilisation dans les applications serveur.
  • ABBYY FineReader Engine peut être chargé via COM en tant que serveur in-process au sein du processus en cours. Cette méthode élimine aussi automatiquement toutes les difficultés liées au multithreading (toutes les opérations sur les objets ABBYY FineReader Engine sont sérialisées via COM) et elle est simple à utiliser. Cependant, cette méthode ne permet pas d’organiser un traitement simultané à l’aide de plusieurs instances de l’objet Engine, ce qui limite à bien des égards les performances du serveur. Un autre inconvénient de cette méthode est qu’elle nécessite l’enregistrement de FREngine.dll lors de l’installation de l’application sur l’ordinateur de l’utilisateur final.
  • FREngine.dll peut être chargé manuellement. Il s’agit de la méthode standard de chargement de la bibliothèque. Cette méthode exige que toutes les opérations sur l’objet Engine soient effectuées dans le même thread que celui dans lequel l’objet Engine a été initialisé. De plus, elle ne permet pas d’initialiser plus d’un objet Engine par processus. Cela limite considérablement les performances du serveur. C’est pourquoi nous ne recommandons pas d’utiliser cette méthode. Un avantage de cette méthode est qu’elle ne nécessite pas l’enregistrement de FREngine.dll lors de l’installation de l’application sur l’ordinateur de l’utilisateur final.
Pour une description détaillée des trois méthodes de chargement disponibles dans ABBYY FineReader Engine, consultez Different Ways to Load the Engine Object.

Exemples

L’exemple de code EnginesPool fournit une implémentation d’un pool de processeurs dans une application multithreadée, et vous pouvez commencer à développer votre propre application en modifiant cet exemple selon vos besoins.

Voir aussi

Différentes façons de charger l’objet Engine