2010-05-27 27 views
1

當我目前使用BehaviorExtensionElement加載在ApplyDispatchBehavior方法被設立爲ServiceBehavior如何掛鉤WF4 WorkflowRuntime的事件:使用XAMLX服務

事件
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; 
     } 
    } 

沒有被觸發,只有可以說我在這個特定的場景中引用運行時實例的方式是錯誤的。

任何人都知道一種方法來做到這一點?提前致謝。

回答

2

WorkflowRuntime和WorkflowRuntimeBehavior是WF3工件,但您的問題被標記爲WF4,所以我會推測您使用的是WF4。

在WF4中,執行此操作的方法是使用自定義TrackingParticipant並將其添加到WorkflowServiceHost的WorkflowExtensions集合中。

+0

完美。那做了這個工作。順便說一句,我完全可以想象你用大衛卡魯索式的方式回答問題。 – 2010-05-28 10:51:02