Ritardo assolutoAbsolute Delay

Lo scenario principale di questo esempio è ritardare un flusso di lavoro fino a una DateTime specificata usando timer durevoli in un'applicazione flusso di lavoro.The main scenario for this sample is to delay until a specified DateTime using durable timers in a workflow application. Si tratta di uno scenario diverso rispetto all'utilizzo dell'attività Delay incorporata in quanto in questo caso sarà possibile ritardare un flusso di lavoro solo per un determinato TimeSpan (o numero di minuti/secondi).This is different from using the built-in Delay activity as this will only allow you to delay for a given TimeSpan (or number of minutes/seconds).

Di seguito sono elencati alcuni scenari reali nei quali potrebbe essere necessario fare questa distinzione:Some real-life scenarios in which you may want to make this distinction include the following:

  1. Si desidera ritardare di 30 secondi l'invio di un messaggio di posta elettronica per verificare che non contenga errori.You want to delay sending a mail for 30 seconds to make sure you didn’t make any errors.

  2. In caso di straordinari sul lavoro, si desidera ritardare l'invio di tutti i messaggi di posta elettronica fino al normale orario di lavoro (ad esempio 8 del mattino).You are working overtime and want to delay all of your mails until normal business hours (such as 8 am).

DimostrazioneDemonstrates

  1. DurableTimerExtension per l'implementazione del ritardo assolutoDurableTimerExtension for implementing Absolute Delay

  2. Configurazione della persistenza usando WorkflowApplication per timer durevoliSetting up persistence using WorkflowApplication for Durable Timers

  3. Uso di NativeActivity<TResult> per i punti di estensibilitàUse of NativeActivity<TResult> for using Extensibility points

  4. Uso di CodeActivity<TResult> nell'attività SendEmail.Use of CodeActivity<TResult> in the SendEmail activity

  5. Delay

  6. Flusso di lavoro solo XAMLXAML-only workflow

Questo esempio dimostra come creare un'attività personalizzata che accetta una DateTime e usa timer durevoli per registrare la durata del ritardo.This sample demonstrates how to create a custom activity which takes in a DateTime and uses durable timers to register the delay duration. In caso di utilizzo di timer durevoli, è necessario usare un'attività NativeActivity per creare un segnalibro, in quanto è necessario registrare questo segnalibro con l'estensione del timer.When using durable timers, you must use a NativeActivity to create a bookmark, as you will need to register this bookmark with the timer extension. In questo esempio, quando il timer durevole scade, viene chiamato il metodo OnTimerExpired.In this sample, when the durable timer expires, the OnTimerExpired method will be called. Verificare che l'estensione del timer venga aggiunta all'evento CacheMetadata per garantire che venga fornito il runtime con queste informazioni.Make sure that you are adding the timer extension in the CacheMetadata event to ensure you are providing the runtime with this information. Come unico altro dettaglio di implementazione, sarà necessario implementare la logica per la conversione da DateTime a TimeSpan, in quanto i timer durevoli accettano solo DateTime.The only other implementation detail is that you will need to implement logic to convert from DateTime to TimeSpan, as durable timers only take in a DateTime. Notare la piccola perdita di precisione.Do note that there is a small lapse in accuracy by doing

Nota

La conversione da DateTime a TimeSpan determina una minima perdita di precisione.There is a small loss of accuracy by converting from DateTime to TimeSpan.

Questo esempio dimostra inoltre come attivare la persistenza per una WorkflowApplication.This sample also demonstrates how to turn on persistence for a WorkflowApplication. Per questo particolare esempio, verranno usati timer durevoli in cui i dati del flusso di lavoro verranno scaricati nel database di persistenza durante il tempo di inattività in attesa della scadenza del timer.For this particular sample, we will be using durable timers in which the workflow data will be unloaded into the persistence database during the idle time while waiting for timer to expire. Questa implementazione può essere usata anche per altre azioni di persistenza.This implementation can also be used for other persistence actions. Questo esempio mostra come configurare la stringa di connessione della persistenza con SQL Server e come creare l'archivio di istanze per rendere persistenti i dati delle istanze del flusso di lavoro.This sample shows how to set up the persistence connection string with SQL Server, and how to create the instance store in order to persist the data for workflow instances. Viene fornita la logica per riprendere il flusso di lavoro una volta generato un evento che rende eseguibile l'istanza del flusso di lavoro.Logic is provided on how to resume the workflow once an event is raised which makes the workflow instance runnable.

Mentre si esegue questo esempio, si noterà che il tempo in cui inizia il ritardo predefinito e viene completato, che a sua volta causerà un messaggio di posta elettronica da inviare.As you step through this sample, you will see the time in which the built-in delay begins and completes, which in turn will cause an email message to be sent. A questo punto, l'attività AbsoluteDelay verrà interrotta fino a una determinata DateTime (o 0 secondi se DateTime è scaduta), che a sua volta invierà un messaggio di posta elettronica alla scadenza.From there, the AbsoluteDelay activity will halt until a specified DateTime (or 0 seconds if the DateTime has expired) which in turn will send out an email upon expiration. In questo modo verranno mostrati i due diversi casi di utilizzo della funzionalità Delay incorporata rispetto all'utilizzo di un'attività AbsoluteDelay.This will show the two different use cases of the built-in Delay functionality versus using an AbsoluteDelay activity.

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Verificare che sul computer sia installato SQL Server Express (o versione successiva).Ensure you have SQL Server Express (or higher) installed on your machine

  2. Eseguire setup.cmd (da WF/Basic/Services/AbsoluteDelay/CS) in un prompt dei comandi di Visual Studio 2010Visual Studio 2010 per creare il database AbsoluteDelaySampleDB, lo schema di persistenza e la logica di persistenza.Run setup.cmd (from WF/Basic/Services/AbsoluteDelay/CS) in a Visual Studio 2010Visual Studio 2010 command prompt to create the AbsoluteDelaySampleDB database, create the persistence schema and create the persistence logic.

  3. Aprire la soluzione in Visual Studio 2010Visual Studio 2010.Open the solution in Visual Studio 2010Visual Studio 2010.

  4. Specificare Duration nell'attività Delay.Specify the Duration in the Delay activity.

  5. Specificare ExpirationTime nell'attività AbsoluteDelay.Specify the ExpirationTime in the AbsoluteDelay activity.

  6. Aggiornare i campi SendMailTo, SendMailFrom, SendMailSubject, SendMailBody e SmtpHost nell'attività SendMail.Update the SendMailTo, SendMailFrom, SendMailSubject, SendMailBody, and SmtpHost fields in the SendMail activity.

    Nota

    Se non si specifica un host SMTP valido, l'applicazione genera un'eccezione SMTP.If you do not enter a valid SMTP host, the application will throw a SMTP exception.

  7. Compilare la soluzione selezionando compilare, Compila soluzione.Build the solution by selecting Build, Build Solution.

  8. Eseguire la soluzione premendo F5.Run the solution by pressing F5.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Services\AbsoluteDelay