메시징 작업을 사용하여 워크 플로를 시작하고 유지했습니다. Start initial 명령과 Stop final 명령 간의 상관 관계가 몇 초 내에 전송되면 제대로 작동합니다. LoadWorkflowByInstanceKeyCommand.AssociateLookupKeyToInstanceId를 지정하지 않으면지속 된 워크 플로를로드하는 중 오류가 발생했습니다.
에서, LookupInstanceKey 이미 인스턴스에 연결되어 있어야합니다 또는 LoadWorkflowByInstanceKeyCommand 실패합니다 : 워크 플로가 언로드 될 때 다음과 같은 중지 메시지는 다음 오류 예외를 throw 때문에 문제는 시작합니다. 이러한 이유 때문에 AssociateLookupKeyToInstanceId가 설정되지 않은 경우 LookupInstanceKey를 InstanceKeysToAssociate 컬렉션에 지정하는 것은 유효하지 않습니다.
아무도 도와 줄 수 있습니까? 워크 플로의 변수는 int 및 XDocument 형식입니다. 이것은 WorkflowServiceHost를 초기화하는 코드입니다 :
WorkflowServiceHost serviceHost = new WorkflowServiceHost(myWorkflow, new Uri(serviceUri));
ServiceDebugBehavior debug = serviceHost.Description.Behaviors.Find<ServiceDebugBehavior>();
if (debug == null)
{
debug = new ServiceDebugBehavior();
serviceHost.Description.Behaviors.Add(debug);
}
debug.IncludeExceptionDetailInFaults = true;
WorkflowIdleBehavior idle = serviceHost.Description.Behaviors.Find<WorkflowIdleBehavior>();
if (idle == null)
{
idle = new WorkflowIdleBehavior();
serviceHost.Description.Behaviors.Add(idle);
}
idle.TimeToPersist = TimeSpan.FromSeconds(2);
idle.TimeToUnload = TimeSpan.FromSeconds(10);
var behavior = new SqlWorkflowInstanceStoreBehavior
{
ConnectionString = ConfigurationManager.ConnectionStrings["WorkflowPersistence"].ConnectionString,
InstanceEncodingOption = InstanceEncodingOption.None,
InstanceCompletionAction = InstanceCompletionAction.DeleteAll,
InstanceLockedExceptionAction = InstanceLockedExceptionAction.BasicRetry,
HostLockRenewalPeriod = new TimeSpan(00, 00, 30),
RunnableInstancesDetectionPeriod = new TimeSpan(00, 00, 05)
};
serviceHost.Description.Behaviors.Add(behavior);
serviceHost.Open();
데이터베이스를 보면, 워크 플로가 중단되지 않습니다 것으로 보인다.
어떤 도움을 주시면 감사
는 는 감사합니다
일시 중지 된 경우 RunnableInstancesTable 테이블로 이동하고 IsSuspended 값이 InstancesTable 테이블에서 1로 설정됨을 의미합니다. 지연을 추가하면 올바르게 일시 중단되기 때문에 워크 플로를 직렬화 할 수 있습니다. 문제는 WorkflowIdleBehavior.TimeToUnload 경과 후에 워크 플로가 일시 중단되지 않고 Stop 작업을 호출하면 앞서 언급 한 오류가 발생한다는 것입니다. TimeToUnload 시간 초과 전에 중지 작업을 보내면 오류가 발생하지 않습니다. 장기간 실행되는 워크 플로입니다. – fra
워크 플로우 정의에 오류가 발생하여 Stop receive 활동에서 상관 초기화를 반복한다는 것을 알았습니다. 어쨌든, 유휴 워크 플로우가 runnableinstancestable에없는 이유에 대한 설명에 감사드립니다 ... 어쨌든 데이터베이스에 직렬화되고 메모리에서 언로드됩니까? 어떤 정책이 사용됩니까? – fra
지속 된 워크 플로는 InstancesTable 테이블에 저장되며 RunnableInstancesTable은 모든 워크 플로가 정상적으로 작동하지 않을 때 워크 플로 복구에 사용됩니다. 일반적으로 워크 플로가 지속되는 경우 일시 중단되지 않고 정책이 AbandonAndSuspend로 설정된 경우 일시 중단됩니다. 즉, 워크 플로가 자동으로 다시 시작되지는 않지만 수동으로 다시 시작해야합니다. – Maurice