Как подключить события WF4 WorkflowRuntime при использовании службы XAMLX - PullRequest
1 голос
/ 27 мая 2010

В настоящее время я использую 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 Ответ

2 голосов
/ 27 мая 2010

WorkflowRuntime и WorkflowRuntimeBehavior являются артефактами WF3, но ваш вопрос помечен как WF4, поэтому я предполагаю, что вы используете WF4.

В WF4 способ сделать это - использовать собственный TrackingParticipant и добавить его в коллекцию WorkflowExtensions WorkflowServiceHost.

...