Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O exemplo CustomTracking demonstra como criar um participante de rastreamento personalizado e gravar o conteúdo dos dados de acompanhamento no console. Além disso, o exemplo demonstra como emitir CustomTrackingRecord objetos preenchidos com dados definidos pelo usuário. O participante de acompanhamento baseado em console filtra os TrackingRecord objetos emitidos pelo fluxo de trabalho usando um objeto de perfil de acompanhamento criado em código.
Detalhes de exemplo
O Windows Workflow Foundation (WF) fornece uma infraestrutura de acompanhamento para acompanhar a execução de uma instância de fluxo de trabalho. O mecanismo de acompanhamento executa uma instância de fluxo de trabalho para gerar eventos relacionados ao ciclo de vida do fluxo de trabalho, eventos de atividades de fluxo de trabalho e eventos de rastreamento personalizados. A tabela a seguir detalha os componentes primários da infraestrutura de acompanhamento.
Componente | Descrição |
---|---|
Monitoramento do tempo de execução | Fornece a infraestrutura para emitir registros de acompanhamento. |
Acompanhamento de participantes | Consome os registros de rastreamento. O .NET Framework 4 é fornecido com um participante de acompanhamento que grava registros de acompanhamento como eventos de Rastreamento de Eventos para Windows (ETW). |
Controlando o perfil | Um mecanismo de filtragem que permite que um participante de rastreamento assine para um subconjunto de registros de rastreamento emissores de uma instância de fluxo de trabalho. |
A tabela a seguir detalha os registros de rastreamento que o tempo de execução do fluxo de trabalho emite.
Registro de rastreamento | Descrição |
---|---|
Registros de rastreamento de instância de fluxo de trabalho. | Descreve o ciclo de vida da instância de fluxo de trabalho. Por exemplo, um registro de instância é emitido quando o fluxo de trabalho é iniciado ou concluído. |
Estado da atividade que acompanha registros. | Detalha a execução da atividade. Esses registros indicam o estado de uma atividade de fluxo de trabalho como quando uma atividade é agendada ou quando a atividade completa ou quando uma falha é lançada. |
Registro de ressunção do indexador. | Emitido sempre que um marcador dentro de uma instância de fluxo de trabalho é retomado. |
Registros de acompanhamento personalizados. | Um autor de fluxo de trabalho pode criar registros de rastreamento personalizados e emitê-los dentro da atividade personalizada. |
O participante de rastreamento assinatura para um subconjunto dos objetos emissores de TrackingRecord usando perfis de rastreamento. Um perfil de acompanhamento contém consultas de acompanhamento que permitem a assinatura de um tipo de registro de acompanhamento específico. Os perfis de acompanhamento podem ser especificados no código ou na configuração.
Participante de rastreamento personalizada
O participante API de rastreamento permite a extensão de rastreamento com um usuário fornecido pelo participante que pode incluir a lógica personalizada para manipular os objetos de TrackingRecord emissores em runtime de fluxo de trabalho.
Para gravar um participante de rastreamento o usuário deve implementar TrackingParticipant. Especificamente, o Track método precisa ser implementado pelo participante personalizado. Esse método é chamado quando um TrackingRecord é emitido pelo runtime do fluxo de trabalho.
public abstract class TrackingParticipant
{
protected TrackingParticipant();
public virtual TrackingProfile TrackingProfile { get; set; }
public abstract void Track(TrackingRecord record, TimeSpan timeout);
}
O participante de acompanhamento completo é implementado no arquivo ConsoleTrackingParticipant.cs. O exemplo de código a seguir é o método Track para o participante de acompanhamento personalizado.
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
...
WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;
if (workflowInstanceRecord != null)
{
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" Workflow InstanceID: {0} Workflow instance state: {1}",
record.InstanceId, workflowInstanceRecord.State));
}
ActivityStateRecord activityStateRecord = record as ActivityStateRecord;
if (activityStateRecord != null)
{
IDictionary<String, object> variables = activityStateRecord.Variables;
StringBuilder vars = new StringBuilder();
if (variables.Count > 0)
{
vars.AppendLine("\n\tVariables:");
foreach (KeyValuePair<string, object> variable in variables)
{
vars.AppendLine(String.Format(
"\t\tName: {0} Value: {1}", variable.Key, variable.Value));
}
}
Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
" :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
activityStateRecord.Activity.Name, activityStateRecord.State,
((variables.Count > 0) ? vars.ToString() : String.Empty)));
}
CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;
if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
{
...
}
Console.WriteLine();
}
O exemplo de código a seguir adiciona o participante do console ao invocador de fluxo de trabalho.
ConsoleTrackingParticipant customTrackingParticipant = new ConsoleTrackingParticipant()
{
...
// The tracking profile is set here, refer to Program.CS
...
}
WorkflowInvoker invoker = new WorkflowInvoker(BuildSampleWorkflow());
invoker.Extensions.Add(customTrackingParticipant);
Emitindo registros de acompanhamento personalizados
Este exemplo também demonstra a capacidade de emitir objetos de CustomTrackingRecord de uma atividade personalizado de fluxo de trabalho:
Os CustomTrackingRecord objetos são criados e preenchidos com dados definidos pelo usuário que desejam ser emitidos com o registro.
A CustomTrackingRecord é emitida chamando o método de rastreamento do ActivityContext.
O exemplo a seguir demonstra como emitir CustomTrackingRecord objetos dentro de uma atividade personalizada.
// Create the Custom Tracking Record
CustomTrackingRecord customRecord = new CustomTrackingRecord("OrderIn")
{
Data =
{
{"OrderId", 200},
{"OrderDate", "20 Aug 2001"}
}
};
// Emit custom tracking record
context.Track(customRecord);
Para usar este exemplo
Usando o Visual Studio, abra o arquivo de solução CustomTrackingSample.sln.
Para criar a solução, pressione CTRL+SHIFT+B.
Para executar a solução, pressione CTRL+F5.