locked
Workflow ownership exception RRS feed

  • Pergunta

  • Ola,

    Estou tendo esse erro quando publico uma versão no meu ambiente de homologação. O problema é que esse erro não ocorre na minha versão local. Ja publiquei novas versões em homologação para garantir que a versão que esta la é a mesma que tenho localmente. Porém, continuo com o erro.

    Ao tentar rodar o projeto usando a base de homologação não ocorre nenhum erro, então, creio que o problema não seja na base.

    A unica coisa que me passou pela cabeça foi alguma configuração no ambiente de homologação (IIS e etc), porém, acho que é uma opção remota, pois, já possuia uma versão publicada em homologação que funcionava perfeitamente.

     

    Creio também, que não seja um problema de timeout, pois, as operações executadas pelo workflow são pequenas (questão de segundos).

     

    Segue a configuração do meu runtime:

    static WorkflowHelper() {
          //string connectionString = global::DALWorkflow.Properties.
          string connectionString = MPS.Workflow.DAL.DALHelper.GetConnectionString();   
          //string connectionString = global::MPS.Workflow.Properties.Settings.Default.GEDSPConnectionString;

          runtime = new WorkflowRuntime();
          Helper.UserActivityService = UserActivityService.Singleton;

          runtime.AddService(new SqlWorkflowPersistenceService(connectionString, true, new TimeSpan(0, 2, 0), new TimeSpan(0, 30, 0)));
          runtime.AddService(new SharedConnectionWorkflowCommitWorkBatchService(connectionString));
          runtime.AddService(new ManualWorkflowSchedulerService(true));
          List<string> propertiesToTrack = new List<string>();
          propertiesToTrack.Add("ActivityData");
          runtime.AddService(new DatabaseTrackingService(propertiesToTrack));
          runtime.StartRuntime();

        }

     

    Aguardo um retorno,

    Fabricio.

    terça-feira, 12 de julho de 2011 20:56

Respostas

  • Consegui descobrir o motivo do erro.

    A maquina que tinha a aplicacao estava com a data atrasada 3 minutos com relação a maquina que tinha o Banco de dados.

    Como meu timeout é de 2 minutos, o banco ja criava uma data que ja "nascia" estourada por 1 minuto.

    Pra corrigir o problema apenas igualei as datas das 2 maquinas.

     

     

    quarta-feira, 13 de julho de 2011 18:26

Todas as Respostas

  • Fabrício,

    Qual é a mensagem exata do erro que está acontecendo?

    Tente também fazer um trace do Call Stack, para saber onde ele acontece.

    at.,

     


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 13 de julho de 2011 16:10
    Moderador
  • Então, é aquela mensagem padrao:

    "This workflow is not owned by the WorkflowRuntime. The WorkflowRuntime's ownership has expired, or another WorkflowRuntime owns the workflow."

    Ocorre no momento de persistir o workflow no banco.

    quarta-feira, 13 de julho de 2011 16:42
  • pra complementar, pequei um trecho do trace:

     

    .....

    System.Workflow.Runtime Information: 1 : Workflow Runtime: Scheduler: InstanceId: 962e5499-003f-4ef0-be20-cbe8b1c65c16 : Scheduling entry: SubscriptionEvent((1)PedidoTreinamentoXML, ActivityStatusChange('(1)PedidoTreinamentoXML', Executing, Succeeded))
    System.Workflow.Runtime Information: 1 : Workflow Runtime: Scheduler: InstanceId: 962e5499-003f-4ef0-be20-cbe8b1c65c16 : Done with running scheduled entry: SubscriptionEvent((1)PedidoTreinamentoXML, ActivityStatusChange('(1)Se_Aprovado_RH', Closed, Succeeded))
    System.Workflow.Runtime Information: 1 : Workflow Runtime: Scheduler: InstanceId: 962e5499-003f-4ef0-be20-cbe8b1c65c16 : Running scheduled entry: SubscriptionEvent((1)PedidoTreinamentoXML, ActivityStatusChange('(1)PedidoTreinamentoXML', Executing, Succeeded))
    System.Workflow.Runtime Information: 0 : Activity Status Change - Activity: PedidoTreinamentoXML Old:Executing; New:Closed
    System.Workflow.Runtime.Tracking Information: 0 : TrackingListener::ActivityStatusChange - Received Activity Status Change Event for activity PedidoTreinamentoXML
    System.Workflow.Runtime Information: 0 : Workflow Runtime: WorkflowExecutor: Calling SaveWorkflowInstanceState for instance 962e5499-003f-4ef0-be20-cbe8b1c65c16 hc 2026335
    System.Workflow.Runtime.Hosting Information: 0 : SqlWorkflowPersistenceService(ddd2663e-96e8-4bd0-9538-58c9f1d5a52b):Committing instance 962e5499-003f-4ef0-be20-cbe8b1c65c16, Blocked=0, Unlocked=True, NextTimer=12/31/9999 21:59:59
    System.Workflow.Runtime Information: 0 : pending work hc 28487350 added workItem hc 55059565
    System.Workflow.Runtime Information: 0 : Workflow Runtime: WorkflowExecutor: Calling CommitTransaction for instance 962e5499-003f-4ef0-be20-cbe8b1c65c16 hc 2026335
    System.Workflow.Runtime.Hosting Information: 0 : AddToConnectionInfoTable 1 in table of count 1
    System.Workflow.Runtime Information: 0 : pending work hc 28487350 added workItem hc 55059565
    System.Workflow.Runtime.Hosting Information: 0 : SqlWorkflowPersistenceService(ddd2663e-96e8-4bd0-9538-58c9f1d5a52b): inserting instance: 962e5499-003f-4ef0-be20-cbe8b1c65c16, unlocking: True database: WorkflowSP
    System.Workflow.Runtime.Hosting Information: 0 : SqlWorkflowPersistenceService(ddd2663e-96e8-4bd0-9538-58c9f1d5a52b): owership violation with ddd2663e-96e8-4bd0-9538-58c9f1d5a52b on instance 962e5499-003f-4ef0-be20-cbe8b1c65c16
    System.Workflow.Runtime Error: 0 : SqlWorkflowPersistenceService(ddd2663e-96e8-4bd0-9538-58c9f1d5a52b): Exception thrown while persisting instance: This workflow is not owned by the WorkflowRuntime. The WorkflowRuntime's ownership has expired, or another WorkflowRuntime owns the workflow.
    System.Workflow.Runtime Error: 0 : stacktrace :    at System.Workflow.Runtime.Hosting.PersistenceDBAccessor.CheckOwnershipResult(DbCommand command)
       at System.Workflow.Runtime.Hosting.PersistenceDBAccessor.InsertInstanceState(PendingWorkItem item, Guid ownerId, DateTime ownedUntil)
       at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.System.Workflow.Runtime.IPendingWork.Commit(Transaction transaction, ICollection items)
    System.Workflow.Runtime.Hosting Information: 0 : TransactionCompleted 1
    System.Workflow.Runtime.Hosting Error: 0 : SharedConnectionWorkflowCommitWorkBatchService caught exception from commitWorkBatchCallback: System.Workflow.Runtime.WorkflowOwnershipException: This workflow is not owned by the WorkflowRuntime. The WorkflowRuntime's ownership has expired, or another WorkflowRuntime owns the workflow.
       at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.System.Workflow.Runtime.IPendingWork.Commit(Transaction transaction, ICollection items)
       at System.Workflow.Runtime.WorkBatch.PendingWorkCollection.Commit(Transaction transaction)
       at System.Workflow.Runtime.WorkBatch.Commit(Transaction transaction)
       at System.Workflow.Runtime.VolatileResourceManager.Commit()
       at System.Workflow.Runtime.WorkflowExecutor.DoResourceManagerCommit()
       at System.Workflow.Runtime.Hosting.SharedConnectionWorkflowCommitWorkBatchService.CommitWorkBatch(CommitWorkBatchCallback commitWorkBatchCallback)
    System.Workflow.Runtime Error: 0 : Workflow Runtime: WorkflowExecutor: Persist attempt on instance '962e5499-003f-4ef0-be20-cbe8b1c65c16' threw an exception 'This workflow is not owned by the WorkflowRuntime. The WorkflowRuntime's ownership has expired, or another WorkflowRuntime owns the workflow.' at    at System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService.System.Workflow.Runtime.IPendingWork.Commit(Transaction transaction, ICollection items)
       at System.Workflow.Runtime.WorkBatch.PendingWorkCollection.Commit(Transaction transaction)
       at System.Workflow.Runtime.WorkBatch.Commit(Transaction transaction)
       at System.Workflow.Runtime.VolatileResourceManager.Commit()

    .....

     

    quarta-feira, 13 de julho de 2011 17:51
  • Consegui descobrir o motivo do erro.

    A maquina que tinha a aplicacao estava com a data atrasada 3 minutos com relação a maquina que tinha o Banco de dados.

    Como meu timeout é de 2 minutos, o banco ja criava uma data que ja "nascia" estourada por 1 minuto.

    Pra corrigir o problema apenas igualei as datas das 2 maquinas.

     

     

    quarta-feira, 13 de julho de 2011 18:26
  • Fabrício,

    Existem 2 motivos para este erro acontecer.

    O primeiro é que o Workflow esta demorando mais que o tempo que você determinou no timeout antes de alguma atividade "mandar" fazer a persistencia da execução.

    O outro motivo seria você estar mantando o runtime sem chamar o método StopRuntime, acho que este pode ser o motivo do seu erro...

    Pelo que vi no seu código, você está inicializando o runtime em um método estático e está sempre criando uma nova instância do WorkflowRuntime. Será que não seria o caso de não re-criar o runtime se ele já estiver sido inicializado, tipo:

    static WorkflowHelper() {
        //string connectionString = global::DALWorkflow.Properties.
        string connectionString = MPS.Workflow.DAL.DALHelper.GetConnectionString();  
        //string connectionString = global::MPS.Workflow.Properties.Settings.Default.GEDSPConnectionString;
    
       if(runtime == null)
       { 
       runtime = new WorkflowRuntime();
        Helper.UserActivityService = UserActivityService.Singleton;
     
       runtime.AddService(new SqlWorkflowPersistenceService(connectionString, true, new TimeSpan(0, 2, 0), new TimeSpan(0, 30, 0)));
        runtime.AddService(new SharedConnectionWorkflowCommitWorkBatchService(connectionString));
        runtime.AddService(new ManualWorkflowSchedulerService(true));
        List<string> propertiesToTrack = new List<string>();
        propertiesToTrack.Add("ActivityData");
        runtime.AddService(new DatabaseTrackingService(propertiesToTrack));
        runtime.StartRuntime();
        }
      }
    

    Mais:

    http://social.msdn.microsoft.com/Forums/en-AU/windowsworkflowfoundation/thread/51319b6e-73dc-44c4-9736-2d2b0d66b58f

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 13 de julho de 2011 18:28
    Moderador