Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os perfis de monitorização contêm consultas que permitem a um participante subscrever-se a eventos de workflow, os quais são emitidos quando o estado de uma instância de workflow muda durante a execução.
Perfis de rastreamento
Os perfis de acompanhamento são usados para especificar quais informações de rastreamento são emitidas para uma instância de fluxo de trabalho. Se nenhum perfil for especificado, todos os eventos de rastreamento serão emitidos. Se um perfil for especificado, os eventos de rastreamento especificados no perfil serão emitidos. Dependendo dos seus requisitos de monitoramento, você pode escrever um perfil que seja muito geral, que se inscreva em um pequeno conjunto de alterações de estado de alto nível em um fluxo de trabalho. Por outro lado, você pode criar um perfil muito detalhado cujos eventos resultantes são ricos o suficiente para reconstruir um fluxo de execução detalhado posteriormente.
Os perfis de rastreamento aparecem como elementos XML dentro de um ficheiro de configuração padrão do .NET Framework ou especificados no código. O exemplo a seguir é de um perfil de rastreamento do .NET Framework 4.6.1 em um arquivo de configuração que permite que um participante de rastreamento assine os eventos do fluxo de trabalho Started e Completed.
<system.serviceModel>
...
<tracking>
<profiles>
<trackingProfile name="Sample Tracking Profile">
<workflow activityDefinitionId="*">
<workflowInstanceQueries>
<workflowInstanceQuery>
<states>
<state name="Started"/>
<state name="Completed"/>
</states>
</workflowInstanceQuery>
</workflowInstanceQueries>
</workflow>
</trackingProfile>
</profiles>
</tracking>
...
</system.serviceModel>
O exemplo a seguir mostra o perfil de acompanhamento equivalente criado usando código.
TrackingProfile profile = new TrackingProfile()
{
Name = "CustomTrackingProfile",
Queries =
{
new WorkflowInstanceQuery()
{
// Limit workflow instance tracking records for started and
// completed workflow states.
States = { WorkflowInstanceStates.Started, WorkflowInstanceStates.Completed },
}
}
};
Os registros de rastreamento são filtrados pelo modo de visibilidade dentro de um perfil de acompanhamento usando o ImplementationVisibility atributo. Uma atividade composta é uma atividade de nível superior que contém outras atividades que formam sua implementação. O modo de visibilidade especifica os registros de controle emitidos por atividades compostas dentro de uma atividade de fluxo de trabalho, para especificar se as atividades que formam a implementação estão sendo rastreadas. O modo de visibilidade aplica-se ao nível do perfil de acompanhamento. A filtragem de registros de rastreamento para atividades individuais dentro de um fluxo de trabalho é controlada pelas consultas dentro do perfil de acompanhamento. Para obter mais informações, consulte a seção Tipos de consulta de perfil de controle neste documento.
Os dois modos de visibilidade especificados pelo atributo implementationVisibility no perfil de acompanhamento são RootScope e All. Usar o modo RootScope suprime os registos de monitorização das atividades que constituem a implementação de uma atividade, no caso de uma atividade composta não ser a raiz de um processo. Isso implica que, quando uma atividade implementada usando outras atividades é adicionada a um fluxo de trabalho e o implementationVisibility definido como RootScope, apenas a atividade de nível superior dentro da atividade composta é rastreada. Se uma atividade for a raiz do fluxo de trabalho, a implementação da atividade será o próprio fluxo de trabalho e os registros de controle serão emitidos para as atividades que formam a implementação. O uso do modo Todos permite que todos os registros de rastreamento sejam emitidos para a atividade raiz e todas as suas atividades compostas.
Por exemplo, suponha que MyActivity é uma atividade composta cuja implementação contém duas atividades, Activity1 e Activity2. Quando essa atividade é adicionada a um fluxo de trabalho e o acompanhamento é habilitado com um perfil de acompanhamento definido como implementationVisibilityRootScope, os registros de rastreamento são emitidos apenas para MyActivity. No entanto, não são emitidos registos para as atividades Atividade1 e Atividade2.
No entanto, se o implementationVisibility atributo para o perfil de acompanhamento estiver definido como All, os registros de rastreamento serão emitidos não apenas para MyActivity, mas também para as atividades Activity1 e Activity2.
O implementationVisibility indicador aplica-se aos seguintes tipos de registo de controlo:
RegistroDeEstadoDeAtividade
RegistroDePropagaçãoDeFalhas
CancelarRegistoSolicitado
RegistoDeAtividadeAgendada
Observação
Os CustomTrackingRecords emitidos a partir da implementação da atividade não são filtrados pela configuração de visibilidade da implementação.
A implementationVisibility funcionalidade é especificada como RootScope no perfil de rastreamento no código da seguinte maneira:
TrackingProfile sampleTrackingProfile = new TrackingProfile()
{
Name = "Sample Tracking Profile",
ImplementationVisibility = ImplementationVisibility.RootScope
};
A implementationVisibility funcionalidade é especificada como All no perfil de rastreamento em um arquivo de configuração da seguinte maneira:
<tracking>
<profiles>
<trackingProfile name="Shipping Monitoring" implementationVisibility="All">
<workflow activityDefinitionId="*">
...
</workflow>
</trackingProfile>
</profiles>
</tracking>
A ImplementationVisibility configuração no perfil de rastreamento é opcional. Por padrão, seu valor é definido como RootScope. Os valores para esse atributo também diferenciam maiúsculas de minúsculas.
Tipos de consulta de perfil de rastreio
Os perfis de acompanhamento são estruturados como assinaturas declarativas para registros de acompanhamento que permitem consultar o ambiente de execução do fluxo de trabalho em busca de registros de acompanhamento específicos. Há vários tipos de consulta que permitem que você se inscreva em diferentes classes de TrackingRecord objetos. Os perfis de rastreamento podem ser especificados na configuração ou através do código. Aqui estão os tipos de consulta mais comuns:
WorkflowInstanceQuery - Use isso para acompanhar as alterações no ciclo de vida da instância do fluxo de trabalho, como as demonstradas
Startedanteriormente eCompleted. O WorkflowInstanceQuery é usado para assinar os seguintes TrackingRecord objetos:Os estados que podem ser inscritos são especificados na WorkflowInstanceStates classe.
A configuração ou o código usado para subscrever registos de rastreamento ao nível da instância do fluxo de trabalho para o estado usando o
Startedé mostrado no exemplo a seguir.<workflowInstanceQueries> <workflowInstanceQuery> <states> <state name="Started"/> </states> </workflowInstanceQuery> </workflowInstanceQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new WorkflowInstanceQuery() { States = { WorkflowInstanceStates.Started} } } };ActivityStateQuery - Use isso para controlar as alterações do ciclo de vida das atividades que compõem uma instância de fluxo de trabalho. Por exemplo, você pode querer acompanhar sempre que a atividade "Enviar e-mail" for concluída em uma instância de fluxo de trabalho. Esta consulta é necessária para que um TrackingParticipant subscreva objetos ActivityStateRecord. Os estados disponíveis para assinar são especificados em ActivityStates.
A configuração e o código usados para subscritar registos de acompanhamento de estado de atividade que utilizam o ActivityStateQuery para a atividade
SendEmailActivitysão apresentados no exemplo a seguir.<activityStateQueries> <activityStateQuery activityName="SendEmailActivity"> <states> <state name="Closed"/> </states> </activityStateQuery> </activityStateQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new ActivityStateQuery() { ActivityName = "SendEmailActivity", States = { ActivityStates.Closed } } } };Observação
Se vários elementos activityStateQuery tiverem o mesmo nome, somente os estados no último elemento serão usados no perfil de rastreamento.
ActivityScheduledQuery - Esta consulta permite acompanhar uma atividade marcada para ser executada por uma atividade principal. A consulta é necessária para um TrackingParticipant para se inscrever em ActivityScheduledRecord objetos.
A configuração e o código usado para subscrever registos relacionados com a atividade infantil que está a ser agendada
SendEmailActivityusando o ActivityScheduledQuery são mostrados no exemplo a seguir.<activityScheduledQueries> <activityScheduledQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" /> </activityScheduledQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new ActivityScheduledQuery() { ActivityName = "ProcessNotificationsActivity", ChildActivityName = "SendEmailActivity" } } };FaultPropagationQuery - Use isso para rastrear o tratamento de falhas que ocorrem dentro de uma atividade. A consulta é necessária para um TrackingParticipant para se inscrever em FaultPropagationRecord objetos.
A configuração e o código usados para assinar registros relacionados à propagação de falhas usando FaultPropagationQuery são mostrados no exemplo a seguir.
<faultPropagationQueries> <faultPropagationQuery faultSourceActivityName="SendEmailActivity" faultHandlerActivityName="NotificationsFaultHandler" /> </faultPropagationQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new FaultPropagationQuery() { FaultSourceActivityName = "SendEmailActivity", FaultHandlerActivityName = "NotificationsFaultHandler" } } };CancelRequestedQuery - Use isso para rastrear solicitações de cancelamento de uma atividade secundária pela atividade principal. A consulta é necessária para um TrackingParticipant para se inscrever em CancelRequestedRecord objetos.
A configuração e o código usados para subscrever registos relacionados com o cancelamento de atividades através de CancelRequestedQuery são apresentados no exemplo seguinte.
<cancelRequestedQueries> <cancelRequestedQuery activityName="ProcessNotificationsActivity" childActivityName="SendEmailActivity" /> </cancelRequestedQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new CancelRequestedQuery() { ActivityName = "ProcessNotificationsActivity", ChildActivityName = "SendEmailActivity" } } };CustomTrackingQuery - Use isso para rastrear eventos que você define em suas atividades de código. A consulta é necessária para um TrackingParticipant para se inscrever em CustomTrackingRecord objetos.
A configuração e o código usados para assinar registros relacionados a registros de rastreamento personalizados usando CustomTrackingQuery são mostrados no exemplo a seguir.
<customTrackingQueries> <customTrackingQuery name="EmailAddress" activityName="SendEmailActivity" /> </customTrackingQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new CustomTrackingQuery() { Name = "EmailAddress", ActivityName = "SendEmailActivity" } } };BookmarkResumptionQuery - Use isso para acompanhar a retomada de um marcador em uma instância de fluxo de trabalho. Esta consulta é necessária para que um TrackingParticipant subscreva objetos BookmarkResumptionRecord.
A configuração e o código usados para subscrever a registos relacionados com a retomada de marcadores usando BookmarkResumptionQuery é mostrado no exemplo seguinte.
<bookmarkResumptionQueries> <bookmarkResumptionQuery name="SentEmailBookmark" /> </bookmarkResumptionQueries>TrackingProfile sampleTrackingProfile = new TrackingProfile() { Name = "Sample Tracking Profile", Queries = { new BookmarkResumptionQuery() { Name = "sentEmailBookmark" } } };
Anotações
As anotações permitem que você marque arbitrariamente os registros de rastreamento com um valor que pode ser configurado após o tempo de compilação. Por exemplo, você pode querer que vários registros de rastreamento em vários fluxos de trabalho sejam marcados com "Mail Server" == "Mail Server1". Isso facilita a localização de todos os registros com essa tag ao consultar registros de rastreamento mais tarde.
Para fazer isso, uma anotação é adicionada a uma consulta de acompanhamento, conforme mostrado no exemplo a seguir.
<activityStateQuery activityName="SendEmailActivity">
<states>
<state name="Closed"/>
</states>
<annotations>
<annotation name="MailServer" value="Mail Server1"/>
</annotations>
</activityStateQuery>
Como criar um perfil de acompanhamento
Os elementos de consulta de controle são usados para criar um perfil de controle usando um arquivo de configuração XML ou código do .NET Framework 4.6.1. Aqui está um exemplo de um perfil de acompanhamento criado usando um arquivo de configuração.
<system.serviceModel>
<tracking>
<profiles>
<trackingProfile name="Sample Tracking Profile ">
<workflow activityDefinitionId="*">
<!--Specify the tracking profile query elements to subscribe for tracking records-->
</workflow>
</trackingProfile>
</profiles>
</tracking>
</system.serviceModel>
Advertência
Para um WF usando o host de serviço de fluxo de trabalho, o perfil de controle normalmente é criado usando um arquivo de configuração. Também é possível criar um perfil de rastreamento com código usando o perfil de rastreamento e a API de consulta de rastreamento.
Um perfil configurado como um ficheiro de configuração XML é aplicado a um participante de monitorização usando uma extensão de comportamento. Isso é adicionado a um WorkflowServiceHost conforme descrito na seção posterior "Configurando o Rastreio para um Fluxo de Trabalho".
O nível de detalhes dos registos de rastreamento emitidos pelo host é determinado pelas configurações definidas no perfil de rastreamento. Um participante de acompanhamento faz uma subscrição de registos de acompanhamento ao adicionar consultas a um perfil de acompanhamento. Para subscrever todos os registos de monitorização, o perfil de monitorização precisa especificar todas as consultas de monitorização usando "*" nos campos de nome de cada consulta.
Aqui estão alguns dos exemplos comuns de perfis de rastreamento.
Um perfil de monitorização para obter registos de instâncias de fluxos de trabalho e erros.
<trackingProfile name="Instance and Fault Records"> <workflow activityDefinitionId="*"> <workflowInstanceQueries> <workflowInstanceQuery> <states> <state name="*" /> </states> </workflowInstanceQuery> </workflowInstanceQueries> <activityStateQueries> <activityStateQuery activityName="*"> <states> <state name="Faulted"/> </states> </activityStateQuery> </activityStateQueries> </workflow> </trackingProfile>Um perfil de acompanhamento para obter todos os registros de rastreamento personalizados.
<trackingProfile name="Instance_And_Custom_Records"> <workflow activityDefinitionId="*"> <customTrackingQueries> <customTrackingQuery name="*" activityName="*" /> </customTrackingQueries> </workflow> </trackingProfile>