22 messaggi dal 25 maggio 2009
Salve a tutti.

Mi sto affacciando da pochissimo a questa tecnologia per implementarla in una Web Application e naturalmente mi trovo di fronte a dei problemi.

Volevo realizzare un semplice esempio per capire il funzionamento. (Non ha molto senso logico, ma è solo per apprendimento)

Da una parte ho una semplicissima classe WorkFlow1.cs derivata da SequentialWorkflowActivity che contiene due proprietà pubbliche (String StringaRicevuta e String MessaggioFinale) e un metodo associato ad una codeActivity che setta la stringa a seconda del contenuto di StringaRicevuta (MessaggioFinale = "GIUSTO"; oppure MessaggioFinale = "SBAGLIATO";)

Dall'altra parte ho la mia pagina Default.aspx che contiene un TextBox e un Bottone. Nel Page_Load non faccio alcuna operazione riguardante il workflow, ma solo al Click del bottone come riportato sotto:

  //Metodo Richiamato all'avvio del bottone   
        protected void AvviaWF_Click(object sender, EventArgs e)   
        {   
                          
            //Mi creo la lista di parametri con il nome della proprietà   
            //pubblica e il valore del textbox    
            Dictionary<string, object> parameters =   
                new Dictionary<string, object>();   
            parameters.Add("StringaRicevuta", txtTest.Text);   
   
               
            WorkflowRuntime wr = new WorkflowRuntime();   
   
            wr.WorkflowCompleted +=new EventHandler<WorkflowCompletedEventArgs>(WFCompleted);   
   
   
            //Faccio partire il Worflow   
            WorkflowInstance workflowInstance =   
                wr.CreateWorkflow(typeof(WorkFlowEsempio), parameters);   
           workflowInstance.Start();   
        }   
        //Metodo Richiamato al Completamento del Worflow   
        void WFCompleted(object sender, WorkflowCompletedEventArgs e)   
        {   
            Session["test"] = e.OutputParameters["MessaggioFinale"].ToString();             
        }   


Il mio problema nasce al completamento del Workflow. Molto probabilmente sbaglio io a recuperare i dati oppure salto qualche procedura. Sta di fatto che il workflow dal debug sembra funzionare correttamente, ma effettivamente al completamento quando assegno la sessione, al successivo postback non vedo niente. Ho provato ad inizializzare il testo di una label, a fare un Response.Write ma senza successo. Cosa posso fare? Avete un consiglio?

Grazie a tutti.
Ciao,

secondo me quello che accade è che il ciclo di response viene completato prima che l'esecuzione del wkf sia terminata, quindi quando scatta WFCompleted la tua pagina è stata già bellamente reinviata al browser.

Soluzioni:
1) Usare le async pages
2) Se devi semplicemente imparare WF, crea delle ConsoleApplication invece di webapps che sono più facilmente gestibili; POI quando il tuo task cambierà da "imparare WF" a "imparare come integrare WF in una WebApp" metti di mezzo anche quest'ultima.

m.
22 messaggi dal 25 maggio 2009
Ciao,

Grazie della risposta. Però forse mi sono spiegato male.

Io dovrei già implementare il Workflow nella mia WebApplication per poter semplicemente visualizzare e/o utilizzare nella mia pagina aspx parametri di Output. Volevo solo capire perchè da debug riesco a vedere le assegnazioni e le operazioni, ma sulla mia pagina non ho nessun riscontro.

Grazie ancora.
Eh, te l'ho spiegato perché

m.
Il WF processa i workflow attraverso uno scheduler che gestisce i thread. Quello predefinito usa un thread pool di 10 perciò quando avvi un workflow questo si avvia e potrebbe anche impiegare un mese. Quando puoi questo si completa la sessione non è più disponibile, tutto il contesto di esecuzione è morto, quindi quello che stai cercando di fare non è possibile.

Devi cambiare scheduler e usare quello manuale http://msdn.microsoft.com/en-us/library/system.workflow.runtime.hosting.manualworkflowschedulerservice.aspx in modo da eseguire il workflow direttamente sul thread stesso che sta processando la richiesta, così da leggere poi il risultato alla fine.

Ciao

Il mio blog
Homepage
ROTFL, hai ragione Cri, il manual scheduler, che pirla che sono
22 messaggi dal 25 maggio 2009
grazie ragazzi mi avete risolto il problema!!!

era il manual scheduler che mancava!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC