Vai al contenuto principale
Questo argomento si applica a FRE per Windows .
L’uso di ABBYY FineReader Engine nelle applicazioni server presenta alcune caratteristiche specifiche:
  • più richieste indipendenti devono essere gestite simultaneamente in più thread all’interno di un singolo processo
  • Engine è in esecuzione su un sistema operativo server in un computer multi-CPU ad alte prestazioni
  • uso con account speciali (Network Service, Local Service, ASPNET)
Nello sviluppo di ABBYY FineReader Engine 12, le specificità sopra indicate sono state prese in considerazione e nell’API sono stati inclusi strumenti che consentono di ottenere oggetti FineReader Engine thread-safe all’interno di un processo server o in processi separati. L’uso di FineReader Engine in più processi consente di creare un pool di oggetti che lavorano simultaneamente e di sfruttare tutta la potenza di calcolo della CPU del server. Questo è l’approccio ottimale nella maggior parte degli scenari server.

Caricamento dell’oggetto Engine in un’applicazione server

Il metodo ottimale per caricare l’Engine in un’applicazione server consiste nel caricarlo tramite COM in un processo separato come server out-of-process. Questo metodo elimina automaticamente tutte le difficoltà legate al multi-threading: tutte le operazioni con gli oggetti di ABBYY FineReader Engine vengono serializzate tramite COM, consentendo di creare più istanze di Engine in più processi e di utilizzarle simultaneamente dall’interno del processo server. Allo stesso tempo, questo metodo è semplice da usare. L’oggetto Engine viene caricato tramite l’oggetto OutprocLoader, che implementa l’interfaccia IEngineLoader.
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// Abbiamo ottenuto Engine in un processo separato
try {
 ...
} finally {
 engineLoader.ExplicitlyUnload(); // Possiamo scaricarlo quando non è più necessario
}
Questo metodo presenta tuttavia un importante svantaggio. Se utilizzato con account speciali, potrebbero essere necessarie autorizzazioni specifiche per eseguire OutprocLoader con tali account. Tuttavia, questo aspetto, così come la necessità di registrare FREngine.dll, non è particolarmente critico nei prodotti server, poiché le applicazioni server vengono solitamente installate da amministratori esperti su un numero limitato di computer.
  • Le autorizzazioni degli account possono essere configurate tramite l’utilità DCOM Config (digitare DCOMCNFG nella riga di comando oppure selezionare Pannello di controllo > Strumenti di amministrazione > Servizi componenti). Nell’albero della console, individuare la cartella Servizi componenti > Computer > Risorse del computer > Configurazione DCOM, fare clic con il pulsante destro del mouse su ABBYY FineReader Engine 12.5 Loader (Server locale) e fare clic su Proprietà. Si aprirà una finestra di dialogo. Fare clic sulla scheda Sicurezza. In Autorizzazioni di avvio, fare clic su Personalizza e quindi su Modifica per specificare gli account autorizzati ad avviare l’applicazione.
Si noti che su un sistema operativo a 64 bit l’applicazione DCOM registrata è disponibile nella console MMC a 32 bit, che può essere avviata con la seguente riga di comando:
"mmc comexp.msc /32"
  • Per registrare FREngine.dll durante l’installazione dell’applicazione sul computer di un utente finale, utilizzare l’utilità regsvr32. Se si usa un sistema operativo a 64 bit, per impostazione predefinita verrà eseguita la versione a 64 bit di regsvr32. Utilizzare la seguente riga di comando:
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
  • Si consiglia di utilizzare una licenza Network sia per il debug dell’applicazione server sia per la sua esecuzione.
Inoltre, è possibile gestire la priorità del processo host e controllarne lo stato tramite l’interfaccia IHostProcessControl. Sono disponibili anche altri metodi per caricare ABBYY FineReader Engine. Tuttavia, presentano alcune caratteristiche che ne limitano notevolmente l’uso nelle applicazioni server.
  • ABBYY FineReader Engine può essere caricato tramite COM come server in-process all’interno del processo corrente. Questo metodo elimina automaticamente anche tutte le difficoltà legate al multithreading (tutte le operazioni sugli oggetti di ABBYY FineReader Engine vengono serializzate tramite COM) ed è facile da usare. Tuttavia, non consente di organizzare l’elaborazione simultanea utilizzando più istanze dell’oggetto Engine, il che limita sotto molti aspetti le prestazioni del server. Un ulteriore svantaggio di questo metodo è che richiede la registrazione di FREngine.dll durante l’installazione dell’applicazione sul computer dell’utente finale.
  • FREngine.dll può essere caricato manualmente. Questo è il metodo standard per caricare la libreria. Richiede che tutte le operazioni con l’oggetto Engine vengano eseguite nello stesso thread in cui l’oggetto Engine è stato inizializzato. Inoltre, non consente di inizializzare più di un oggetto Engine per processo. Questo limita notevolmente le prestazioni del server. Per questo motivo, se ne sconsiglia l’uso. Un vantaggio di questo metodo è che non richiede la registrazione di FREngine.dll durante l’installazione dell’applicazione sul computer dell’utente finale.
Per descrizioni dettagliate dei tre metodi di caricamento disponibili in ABBYY FineReader Engine, vedere Diversi modi per caricare l’oggetto Engine.

Esempi

L’esempio di codice EnginesPool fornisce un’implementazione di un pool di processori per un’applicazione multithread e puoi iniziare a sviluppare la tua applicazione modificando questo esempio in base alle tue esigenze.

Vedi anche

Diversi modi per caricare l’oggetto Engine