Dal forum italiano di sviluppo su SharePoint è venuta fuori un'interessante discussione sul mancato funzionamento di una Delay activity all'interno di un workflow sequenziale creato per essere eseguito all'interno di SharePoint 2010.
Andando nei dettagli, a fronte di un'installazione standard di SharePoint, se si prova a sviluppare un workflow che utilizza una Listen activity con all'interno una Delay activity che blocca il worklfow per un numero preciso di minuti, vi accorgerete che il flusso di operazioni resterà fermo per sempre. Non ci sarà alcun modo per far ripartire quel workflow dopo aver aspettato i minuti definiti all'interno dell'attività di tipo Delay.
Il workflow con cui io ho testato questo comportamento è rappresentato in figura.

Delay activity bug on SharePoint 2010

Girando su internet ci siamo accorti che il problema era già presente all'interno della vecchia versione di SharePoint (WSS 3.0/MOSS 2007) e che non è stato corretto.
C'è una soluzione però !
Per permettere il funzionamento di un workflow che utilizza una Delay activity è necessario settare una proprietà sul sito in cui si intende far girare il workflow, tramite l'utility STSADM.
La proprietà in questione è la "", che va valorizzata con il valore: "".
Quindi, prima possiamo provare a farci stampare il valore attuale della proprietà in questione:

stsadm -o getproperty -pn job-workflow -url http://siteurl


Poi, possiamo settarla:

stsadm -o setproperty -pn job-workflow -pv "Every 5 minutes between 0 and 59" -url http://siteurl


Una volta terminate le operazioni tramite l'utility STSADM, ricordatevi che è necessario un IISRESET e un riavvio del servizio timer di SharePoint.

Fatto questo, il servizio timer capisce che deve controllare i nostri workflow ogni 5 minuti e permette così alla Delay activity di scattare correttamente.
Cosa molto importante da ricordare è che se vogliamo fare debug di un workflow di questo tipo, è necessario attaccarci al processo OSWTimer di SharePoint, altrimenti i nostri breakpoint non verranno mai catturati dal debugger.

Se volete metterci un pò le mani, ecco qua la soluzione di test che ho utilizzato per riscontrare effettivamente il bug sulla mia macchina:
PeppeDotNet.DelayActivityBug.zip