Press "Enter" to skip to content

Problemas com Workflow Foundation 3.5 e contadores de performance no .NET 4

Se você tem algum projeto construído com o Workflow Foundation 3.5 e predente migrar o projeto para .NET 4, sem efetuar a atualização do Workflow para o 4, esse post pode te ajudar!

Primeiro vamos aos detalhes.

O Workflow Foundation 4 é diferente do 3.5, não existe uma migração automática ou facilitada, existem alguns documentos e ferramentas da Microsoft mas nada que funcione bem de verdade.

O lado bom é que o .NET 4 possui tanto o Workflow 3.5 (System.Workflow) e o Workflow 4 (System.Activities), então é possível utilizar .NET 4 mesmo sem efetuar uma migração do Workflow.

Porém se você utiliza contadores de performance pode encontrar a seguinte mensagem de erro ao instanciar o Workflow.

A instância {seuprocesso} não existe na Categoria especificada. em System.Diagnostics.CounterDefinitionSample.GetInstanceValue….

Um erro simples, ao iniciar o Workflow ele não conseguiu adicionar a instância na categoria do contador de performance.

O problema é que foram 5 meses para descobrir o motivo do erro (com ajuda do suporte da MS).

Muito bem, por que esse problema ocorre? Idioma do Windows!!!! 🙂

No .NET 3.x os contadores de performance não eram traduzidos, agora eles são. Ai nós temos um Workflow do .NET 3.5 rodando dentro do .NET 4.0, ai quando a instância do SharedPerformanceCounter tenta funcionar sem problemas, ela se perde com os nomes dos contadores de performance no registro do Windows.

Para resolver o problema é simples.

Troque o idioma da Thread para Inglês, com isso ele conseguirá encontrar e se adicionar no contador de performance, depois disso é só voltar a Thread para o idioma anterior.

Segue exemplo.

Simples de resolver mas que nos deu muita dor de cabeça :), espero que ajude alguém!

Abraços.

  • Zoio Silva

    Que interessante. Me lembrou um problema com a instalação de um CTP do SQL server 2008 que era também relacionado a diferença na cultura. Valeu a dica! Vou me lembrar disso!