locked
Problema WorkflowRuntime no Asp.Net RRS feed

  • Pergunta

  • Ola, gostava que me elucidassem numa questão, sou iniciante no WF e estou aqui com um pequeno problema, o meu cenário é o seguinte; Tenho 2

    paginas Aspx, na primeira pagina crio uma proposta (i.e. Objecto do tipo Proposta) e coloco-a dentro do workflow através do primeiro

    EventHandler, depois quero fazer uma alteração qualquer a essa proposta, digamos mudar o nome por exemplo e ficar a espera que a segunda

    pagina aspx envie um evento a aprovar e complete o workflow.


    --------------------------------
    | HandleExternalEvent 1 |
    ---------------------------------
                      |
       -------------------------
       |   CodeActivity 1   |
       -------------------------
                      |
    --------------------------------
    | HandleExternalEvent 2 |
    --------------------------------


    Problema:

    Se eu correr a aplicação sem colocar o WorkflowRuntime numa variavel de aplicação, isto é se eu o colocar no page load por exemplo o workflow

    executa sem problemas
    e consigo apanhar os eventos e termina-lo. O problema é que o workflow runtime está numa variavel de aplicação e como tal

    quando crio uma instancia de um workflow e o tento executar ele não consegue apanhar os eventos que eu lhe envio.

    Porque se dá este caso? Estou me a esquecer de qualquer pormenor e não consigo encontrar qual é, já devorei tudo o que era documentação e

    supostamente assim devia funcionar.


    Agradecia qualquer sugestão.

    Obrigado!
    quinta-feira, 5 de fevereiro de 2009 20:09

Respostas

  • Parece que o problema estava em obrigar o workflow scheduler a continuar quando a pagina Asp chama o serviço. Bastou-me adicionar

    schedulerService.RunWorkflow(wfi.InstanceId); logo a seguir a chamada do serviço para o workflow continuar.
    • Marcado como Resposta j0nas sexta-feira, 6 de fevereiro de 2009 12:20
    sexta-feira, 6 de fevereiro de 2009 12:20

Todas as Respostas

  • Jonas,

    Acho que passei por algo semelhante ao seu durante um pequeno sistema de helpdesk que estamos montando como testes para o WF na empresa. Somente é permitido um objeto WorkflowRuntime por domínio de aplicação, neste caso, todo o acesso ao objeto deve ser feita se utilizando o conceito de SSO (Single Sign-On) juntamente com um conceito de Factory, o que garante que toda a aplicação vai referenciar o mesmo WorkflowRuntime e obter acesso aos serviços atachados no mesmo.

    Tenho um exemplo de código aqui que pode lhe ser útil........

    public class WorkflowFactory  
        {  
            private static WorkflowRuntime _wRuntime = null;  
            private static object _syncLock = new object();  
     
            public static WorkflowRuntime GetRuntime()  
            {  
                lock (_syncLock)  
                {  
                    if (_wRuntime == null)  
                    {  
                        _wRuntime = new WorkflowRuntime();  
     
                        // Anexar Eventos  
                        AppDomain.CurrentDomain.DomainUnload += new EventHandler(DisposeRuntime);  
                        AppDomain.CurrentDomain.ProcessExit += new EventHandler(DisposeRuntime);  
                    }  
     
                    return _wRuntime;  
                }  
            }  
     
            static void DisposeRuntime(object sender, EventArgs e)  
            {  
                if (_wRuntime != null)  
                {  
                    try 
                    {  
                        _wRuntime.Dispose();  
                    }  
                    catch (ObjectDisposedException) { } // Já limpou o objeto  
                }  
            }  
        } 

    Espero que consiga...

    Um Abraço.......
    sexta-feira, 6 de fevereiro de 2009 00:00
  • Parece que o problema estava em obrigar o workflow scheduler a continuar quando a pagina Asp chama o serviço. Bastou-me adicionar

    schedulerService.RunWorkflow(wfi.InstanceId); logo a seguir a chamada do serviço para o workflow continuar.
    • Marcado como Resposta j0nas sexta-feira, 6 de fevereiro de 2009 12:20
    sexta-feira, 6 de fevereiro de 2009 12:20