활동이 장기간 지속되는 경우 (이 아닌 외부 소스의 응답을 기다리는 활동 인) 해당 활동의 진행 상황을보고하고자합니다. 그러나, 나는 이것을 작동시킬 수 없다. 나는 두 가지 방법으로 ProgressActivity를 구현하려고했습니다Windows Workflow 4 - 레코드를 추적하는 시점은 언제입니까?
class Program
{
static void Main(string[] args)
{
var wfApp = new WorkflowApplication(new ActivityLibrary.ProgressActivity());
var autoResetEvent = new AutoResetEvent(false);
wfApp.Completed = e => autoResetEvent.Set();
wfApp.Extensions.Add(new ConsoleTrackingParticipant());
wfApp.Run();
autoResetEvent.WaitOne();
Console.WriteLine("Done");
Console.ReadLine();
}
}
internal class ConsoleTrackingParticipant : TrackingParticipant
{
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
Console.WriteLine(record.EventTime.ToString());
}
}
:
나는 활동을 실행하는 간단한 콘솔 응용 프로그램을 가지고있다. 우선은 CodeActivity에서 파생 시도,하지만 난이 구현을 사용하면 워크 플로가 완료되면 (보고 record.EventTime가 정확하지만) 나는 함께 모든 사용자 추적 레코드가 나타납니다public sealed class ProgressActivity : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
for (var i = 0; i <= 10; i++)
{
var customTrackingRecord = new CustomTrackingRecord("ProgressTrackingRecord")
{
Data = { { "Progress", i * 10.0 }}
};
context.Track(customTrackingRecord);
Thread.Sleep(1000);
}
}
}
내가 다음 AsyncCodeActivity에서 파생 시도 하지만이 경우에는 내가 "경우 ObjectDisposedException : 측정 ActivityContext은 그것으로 전달 된 함수의 범위 내에서 액세스 할 수 있습니다"얻을 context.Track 라인에 : 나는 갔어요 곳
는public sealed class ProgressActivity : AsyncCodeActivity
{
protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
{
Action action =() =>
{
for (var i = 0; i <= 10; i++)
{
var customTrackingRecord = new CustomTrackingRecord("ProgressTrackingRecord")
{
Data = { { "Progress", i * 10.0 } }
};
context.Track(customTrackingRecord);
Thread.Sleep(1000);
}
};
context.UserState = action;
return action.BeginInvoke(callback, state);
}
protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
{
((Action)context.UserState).EndInvoke(result);
}
}
는 사람이 설명 할 수 잘못된?
P. 워크 플로우가 서버에서 실행될 것이라면 내가 제시 한 접근 방식은 잘 확장되지 않지만, 현재 구축중인 애플리케이션은 데스크톱 애플리케이션입니다.
[편집] 실제로 여기에 더 넓은 질문을 던지고 있습니다. 워크 플로 실행 엔진에서 내 보낸 레코드를 추적 할 때가 있습니까? 내 조사에 따르면 활동이 완료되면 후에 특정 활동에 대한 모든 기록이 으로 배출됩니다. 활동을 수행하는 동안 강제로 배출되도록하는 방법이 있습니까?
더 정확한 설명은 워크 플로가있을 때 추적 레코드가 방출된다는 것입니다 스케줄러의 현재 작업 항목이 없습니다. 활동이 완료되거나 책갈피가되어 유휴 상태가되어 복원 대기 중일 때입니다. 나는 처음에 예정된 시간에 추적 기록을 켜는 옵션이 있다고 생각한다. –
팀, 그 옵션이 무엇인지 알고 싶습니다! 이런 종류의 정보를 찾는 것이 매우 어렵습니다. – Akash