Pular para o conteúdo principal
Este tópico se aplica ao FRE para Windows.
O uso do ABBYY FineReader Engine em aplicações de servidor tem algumas particularidades:
  • várias requisições independentes precisam ser tratadas simultaneamente em várias threads dentro de um único processo
  • o Engine é executado em um sistema operacional de servidor em um computador de alto desempenho com múltiplas CPUs
  • uso com contas especiais (Network Service, Local Service, ASPNET)
No desenvolvimento do ABBYY FineReader Engine 12, as particularidades acima foram levadas em consideração, e a API passou a incluir ferramentas que permitem obter objetos do FineReader Engine seguros para uso em threads, como parte de um processo de servidor ou em processos separados. O uso do FineReader Engine em vários processos permite criar um pool de objetos que funcionam simultaneamente e aproveitam toda a capacidade de CPU do servidor. Essa é a abordagem ideal na maioria dos cenários de servidor.

Carregando o objeto Engine em um aplicativo de servidor

A melhor forma de carregar o Engine em um aplicativo de servidor é carregá-lo via COM em um processo separado, como um servidor fora do processo. Esse método elimina automaticamente todas as dificuldades relacionadas a multithreading: todas as operações com os objetos do ABBYY FineReader Engine são serializadas via COM, o que permite criar várias instâncias do Engine em vários processos e trabalhar com elas simultaneamente a partir do processo do servidor. Ao mesmo tempo, esse método é fácil de usar. O objeto Engine é carregado usando o objeto OutprocLoader, que implementa a interface IEngineLoader.
IEngineLoader engineLoader = new FREngine.OutprocLoader();
IEngine engine = engineLoader.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );
// Obtivemos o Engine em um processo separado
try {
 ...
} finally {
 engineLoader.ExplicitlyUnload(); // Podemos descarregá-lo quando ele não for mais necessário
}
No entanto, esse método tem uma desvantagem importante. Ao usá-lo com contas especiais, podem ser necessárias permissões para executar o OutprocLoader nessas contas. Ainda assim, isso, assim como a necessidade de registrar a FREngine.dll, não é tão crítico em produtos de servidor, pois os aplicativos de servidor geralmente são instalados por administradores experientes em um número reduzido de computadores.
  • As permissões de conta podem ser configuradas usando o utilitário DCOM Config (basta digitar DCOMCNFG na linha de comando ou selecionar Painel de Controle > Ferramentas Administrativas > Serviços de Componentes). Na árvore do console, localize a pasta Serviços de Componentes > Computadores > Meu Computador > DCOM Config, clique com o botão direito em ABBYY FineReader Engine 12.5 Loader (Local Server) e clique em Properties. Uma caixa de diálogo será aberta. Clique na guia Security. Em Launch Permissions, clique em Customize e depois em Edit para especificar as contas que podem iniciar o aplicativo.
Observe que, em um sistema operacional de 64 bits, o aplicativo DCOM registrado está disponível no console MMC de 32 bits, que pode ser executado usando a seguinte linha de comando:
"mmc comexp.msc /32"
  • Para registrar FREngine.dll ao instalar seu aplicativo no computador do usuário final, use o utilitário regsvr32. Se você estiver usando um sistema operacional de 64 bits, a versão de 64 bits do regsvr32 será executada por padrão. Use a seguinte linha de comando:
regsvr32 /s /n /i:"<path to the Inc folder>" "<path to FREngine.dll>"
  • Recomendamos que você use uma licença Network tanto para depurar seu aplicativo de servidor quanto para executá-lo.
Além disso, você pode gerenciar a prioridade de um processo hospedeiro e controlar se ele está em execução usando a interface IHostProcessControl. Também há outros métodos para carregar o ABBYY FineReader Engine. No entanto, eles têm certas características que limitam consideravelmente seu uso em aplicativos de servidor.
  • O ABBYY FineReader Engine pode ser carregado por meio de COM como um servidor in-process no processo atual. Esse método também elimina automaticamente todas as dificuldades relacionadas ao multithreading (todas as operações com os objetos do ABBYY FineReader Engine são serializadas por meio de COM) e é fácil de usar. No entanto, esse método não permite organizar o processamento simultâneo usando várias instâncias do objeto Engine, o que limita bastante o desempenho do servidor. Outra desvantagem desse método é que ele exige o registro de FREngine.dll ao instalar o aplicativo no computador do usuário final.
  • FREngine.dll pode ser carregado manualmente. Esse é o método padrão para carregar a biblioteca. Esse método exige que todas as operações com o objeto Engine sejam realizadas na mesma thread em que o objeto Engine foi inicializado. Além disso, ele não permite inicializar mais de um objeto Engine por processo. Isso limita consideravelmente o desempenho do servidor. Por esse motivo, não recomendamos usar esse método. Uma vantagem desse método é que ele não exige o registro de FREngine.dll ao instalar o aplicativo no computador do usuário final.
Para obter descrições detalhadas dos três métodos de carregamento disponíveis no ABBYY FineReader Engine, consulte Diferentes maneiras de carregar o objeto Engine.

Exemplos

O exemplo de código EnginesPool apresenta uma implementação de um pool de processadores em uma aplicação multithread, e você pode começar a desenvolver sua própria aplicação modificando esse exemplo para adaptá-lo às suas necessidades.

Veja também

Diferentes maneiras de carregar o objeto Engine