Usuário com melhor resposta
Problema WorkflowRuntime no Asp.Net

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