WF数据跟踪SqlTrackingService的问题

在练习WF的Hands-on Labs\Lab03部分的时候,遇到了一个如下的问题:

代码比较简单:

Code Snippet
  1. static string connectionString = "Initial Catalog=TrackingStore; " +
  2.                    "Data Source=.; " +
  3.                              "Integrated Security=SSPI;";
  4.         static void Main(string[] args)
  5.         {
  6.             using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
  7.             {
  8.                 workflowRuntime.AddService(new SqlTrackingService(connectionString));
  9.                 AutoResetEvent waitHandle = new AutoResetEvent(false);
  10.                 workflowRuntime.WorkflowCompleted += delegate(object sender,
  11.                              WorkflowCompletedEventArgs e) { waitHandle.Set(); };
  12.                 workflowRuntime.WorkflowTerminated += delegate(object sender,
  13.                                 WorkflowTerminatedEventArgs e)
  14.                 {
  15.                     Console.WriteLine(e.Exception.Message);
  16.                     waitHandle.Set();
  17.                 };
  18.                 WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof
  19.                    (DefaultSQLServices.Workflow1));
  20.                 instance.Start();
  21.                 instance.Suspend("Reason we are suspending the workflow.");
  22.                 instance.Resume();
  23.                 waitHandle.WaitOne();
  24.                 GetInstanceTrackingEvents(instance.InstanceId);
  25.                 Console.WriteLine("Workflow Completed - press ENTER to continue");
  26.                 Console.Read();
  27.             }            
  28.         }

 

GetInstanceTrackingEvents()方法代码如下:

Code Snippet
  1. static void GetInstanceTrackingEvents(Guid instanceId)
  2.         {
  3.             Console.WriteLine("\r\nInstance Tracking Events :");
  4.             SqlTrackingQuery sqlTrackingQuery = new SqlTrackingQuery(connectionString);
  5.             SqlTrackingWorkflowInstance sqlTrackingWorkflowInstance;
  6.             sqlTrackingQuery.TryGetWorkflow(instanceId, out sqlTrackingWorkflowInstance);
  7.             try
  8.             {
  9.                 foreach (WorkflowTrackingRecord workflowTrackingRecord in sqlTrackingWorkflowInstance.WorkflowEvents)
  10.                 {
  11.                     Console.WriteLine("EventDescription : {0}  DateTime : {1}", workflowTrackingRecord.TrackingWorkflowEvent, workflowTrackingRecord.EventDateTime);
  12.                 }
  13.             }
  14.             catch (Exception)
  15.             {
  16.                 Console.WriteLine("No Instance Tracking Events Found");
  17.             }
  18.         }

工作流Workflow1的只有一个Code活动,输出一段代码。

我遇到的问题是:在程序执行的时候到waitHandle.WaitOne()这一步,系统线程会停止,然后CPU始终保持在一个90%以上。尝试了很多方案,包括重启,换机器都存在问题,Google了好久也没有满意的答复。只是有一个和我遇到的类似问题的人:http://social.msdn.microsoft.com/Forums/en-US/windowsworkflowfoundation/thread/67ea8ad6-c700-4096-a9c4-164d2e7cf7cb/这里虽然没有给出确切的答复,但是给我提供一个思路:可能就是Hand-On自带的创建数据库的一些sql语句的问题。

解决:

workflow安装的位置C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Workflow Foundation\SQL有两个文件夹ZH-CHS和EN,我本身是中文操作系统,就把ZH-CHS里面的四个sql命令文件拷贝出来,覆盖掉里面自带的SQL文件(呵呵,覆盖的时候发现文件大小不一样)。然后重新执行Hands-on Labs\Lab03里面的cmd命令,OK,问题解决。

 

总结:我们在工作过程中,经常会用到别人的现成的东西,甚至老外的。那么如果过程中出现问题,不妨考虑一下是不是语言版本的问题。

posted @ 2010-01-03 18:05  范文轩  阅读(486)  评论(2编辑  收藏  举报