Как подключить события WF4 WorkflowRuntime при использовании службы XAMLX
В настоящее время я использую BehaviorExtensionElement для загрузки ServiceBehavior, где метод ApplyDispatchBehavior установлен как:
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, System.ServiceModel.ServiceHostBase serviceHostBase)
{
WorkflowServiceHost host = serviceHostBase as WorkflowServiceHost;
if (host != null)
{
UnityService.CreateContainer();
host.WorkflowExtensions.Add<IUnityContainer>(delegate { return UnityService.CreateChildContainer(); });
System.Diagnostics.Debug.WriteLine("NotificationService : Adding extension");
WorkflowRuntimeBehavior wfbehavior = serviceDescription.Behaviors.Find<WorkflowRuntimeBehavior>();
WorkflowRuntime runtime = wfbehavior.WorkflowRuntime;
runtime.WorkflowStarted += runtime_WorkflowStarted;
runtime.WorkflowCreated += runtime_WorkflowCreated;
runtime.WorkflowUnloaded += runtime_WorkflowUnloaded;
runtime.WorkflowSuspended += runtime_WorkflowSuspended;
runtime.WorkflowCompleted += runtime_WorkflowCompleted;
runtime.WorkflowAborted += runtime_WorkflowAborted;
runtime.WorkflowTerminated += runtime_WorkflowTerminated;
}
}
Ни одно из событий не запускается, что говорит о том, что способ, которым я ссылаюсь на экземпляр среды выполнения в этом конкретном сценарии, неверен.
Кто-нибудь знает способ сделать это? Заранее спасибо.
1 ответ
Решение
WorkflowRuntime и WorkflowRuntimeBehavior являются артефактами WF3, но ваш вопрос помечен как WF4, поэтому я предполагаю, что вы используете WF4.
В WF4 способ сделать это - использовать пользовательский TrackingParticipant и добавить его в коллекцию WorkflowExtensions WorkflowServiceHost.