国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
基礎(chǔ): Windows Workflow Foundation 中的跟蹤服務(wù)(轉(zhuǎn)與 MSDN)
Windows Workflow Foundation 中的跟蹤服務(wù)
Matt Milner
Get the sample code for this article.
NEW:Explore the sample code online!
- or -
代碼下載位置:Foundations2007_03.exe (178KB)
目錄
跟蹤體系結(jié)構(gòu)
跟蹤配置文件
SQL 跟蹤服務(wù)
查詢跟蹤數(shù)據(jù)
自定義跟蹤服務(wù)
Windows Workflow Foundation 中最強(qiáng)大的功能之一是跟蹤。它使您能夠監(jiān)控事件、活動(dòng)屬性以及您的工作流中的自定義數(shù)據(jù)。在本專欄中,我將檢查跟蹤基礎(chǔ)結(jié)構(gòu)、向您介紹如何使用內(nèi)置的基于 SQL Server™ 的跟蹤服務(wù)以及如何為各種應(yīng)用創(chuàng)建自定義跟蹤服務(wù)。順著這一思路,我將演示如何使用所跟蹤的信息以及如何通過使用跟蹤來滿足一些常見的需求。
許多應(yīng)用程序需要了解程序邏輯和處理步驟的執(zhí)行。這有助于企業(yè)遵守法規(guī),根據(jù)執(zhí)行里程碑或各種其他原因來管理風(fēng)險(xiǎn)列表。Windows® Workflow Foundation 提供了靈活的基礎(chǔ)結(jié)構(gòu),您可以在其中覆蓋您的自定義實(shí)現(xiàn),而不必為各應(yīng)用程序創(chuàng)建不同的跟蹤系統(tǒng)。這簡化了開發(fā)模型,使您可以關(guān)注于跟蹤的業(yè)務(wù)要求。
跟蹤體系結(jié)構(gòu)
當(dāng)在 Windows Workflow Foundation 中承載工作流時(shí),您既可以承載工作流運(yùn)行庫,也可以承載一組運(yùn)行時(shí)服務(wù)。許多運(yùn)行時(shí)服務(wù)(如持久性服務(wù))必須最多有一個(gè)在運(yùn)行庫中注冊(cè)的實(shí)例。跟蹤服務(wù)是個(gè)例外,允許將多個(gè)跟蹤服務(wù)添加到運(yùn)行庫中以支持不同的業(yè)務(wù)要求。這使您能夠?qū)⑷舾刹煌母櫲蝿?wù)應(yīng)用于一個(gè)應(yīng)用程序,各跟蹤服務(wù)負(fù)責(zé)特定的實(shí)現(xiàn)。
Windows Workflow Foundation 中的跟蹤基于中央偵聽器,偵聽器可監(jiān)控活動(dòng)和工作流事件并將相應(yīng)的數(shù)據(jù)發(fā)送到各個(gè)配置的跟蹤服務(wù)。(這種體系結(jié)構(gòu)如圖 1 所示。)跟蹤偵聽器接收所有事件的通知,但多數(shù)情況下,只有這些事件中的一個(gè)子集是有用的。而且,如果您要使用多個(gè)跟蹤服務(wù),各任務(wù)有可能將只關(guān)注于唯一一個(gè)信息子集。因此,跟蹤偵聽器將查詢各配置的跟蹤服務(wù)以跟蹤各類工作流的配置文件。
圖 1 跟蹤體系結(jié)構(gòu) (單擊該圖像獲得較小視圖)
圖 1 跟蹤體系結(jié)構(gòu) (單擊該圖像獲得較大視圖)
跟蹤配置文件為偵聽器提供關(guān)于跟蹤服務(wù)要接收的事件的類型的信息。這些事件可以分為三類:工作流、活動(dòng)和用戶。
工作流事件使您能夠跟蹤工作流可能處于的各種狀態(tài),以及它們發(fā)生的時(shí)間。對(duì)于包含自定義事件參數(shù)的事件,如 WorkflowTerminated 或 WorkflowCompleted,事件參數(shù)本身可被跟蹤,并隨后被查詢。
活動(dòng)事件使您能夠跟蹤活動(dòng)進(jìn)入特定狀態(tài)的時(shí)間和活動(dòng)進(jìn)入該狀態(tài)時(shí)具體的活動(dòng)屬性值。例如,如果您有一個(gè)發(fā)送電子郵件的活動(dòng),當(dāng)活動(dòng)進(jìn)入 Closed 狀態(tài)時(shí),您可以跟蹤 To 地址屬性。
最后,用戶事件使您可以在您的工作流或活動(dòng)中手動(dòng)跟蹤數(shù)據(jù)。
跟蹤配置文件
每個(gè)跟蹤服務(wù)都必須向跟蹤偵聽器提供跟蹤配置文件。一個(gè)服務(wù)可以為所有工作流提供相同的配置文件,也可以為不同類型的工作流提供不同的配置文件。由服務(wù)編寫者確定管理和生成配置文件的方式。
可使用在 System.Workflow.Runtime.Tracking 命名空間中或直接在 XML 中找到的對(duì)象模型來創(chuàng)建跟蹤配置文件。通常使用對(duì)象模型來創(chuàng)建它們,但這不是表示配置文件的唯一方法,也并非最佳方法。因此,跟蹤配置文件可被序列化到 XML,也可以從 XML 反序列化。您可以使用 TrackingProfileSerializer 類將 TrackingProfile 對(duì)象轉(zhuǎn)換為 XML 文本,反之亦然。Windows SDK 中的 Tracking Profile Designer(跟蹤配置文件設(shè)計(jì)器)示例是與此有關(guān)的一個(gè)有用示例,也是基本跟蹤配置文件編輯的一個(gè)不錯(cuò)工具。該應(yīng)用程序使您能夠使用工作流設(shè)計(jì)圖面可視化地定義跟蹤配置文件。盡管該工具有一些局限性,如缺乏對(duì)用戶跟蹤點(diǎn)的支持,但它可使您查看序列化形式的跟蹤文件。在許多情形下,它還可加快開發(fā)和部署跟蹤配置文件的速度。
跟蹤配置文件實(shí)質(zhì)上是一組跟蹤點(diǎn)。各跟蹤點(diǎn)與被跟蹤的事件的類型相關(guān),為運(yùn)行庫提供了關(guān)于何時(shí)提取數(shù)據(jù)以及提取哪些數(shù)據(jù)的信息。例如,要指明應(yīng)跟蹤的工作流事件,WorkflowTrackPoint 必須被添加到跟蹤配置文件中。跟蹤點(diǎn)包含一個(gè)或多個(gè)跟蹤位置,這些跟蹤位置實(shí)際定義了跟蹤數(shù)據(jù)的位置和時(shí)間。例如,在 WorkflowTrackPoint 中,MatchingLocation 屬性可識(shí)別各種要跟蹤的工作流事件。圖 2 中的代碼顯示了要?jiǎng)?chuàng)建的跟蹤配置文件。它有一個(gè) WorkflowTrackPoint,指明了服務(wù)要跟蹤失敗條件(如異常、終止和工作流終止)。
ActivityTrackPoint 支持更豐富的跟蹤。由于活動(dòng)構(gòu)成了工作流的核心,因此這是符合邏輯的。ActivityTrackPoint 包含 MatchingLocations 和 ExcludedLocations 集合,使您能夠密切控制數(shù)據(jù)收集的時(shí)間。對(duì)于上述兩個(gè)集合,您可以定義代表您要匹配的條件集合的 ActivityTrackingLocation。
ActivityTrackingLocation 類使您能夠定義您要根據(jù)其類型進(jìn)行跟蹤的活動(dòng)。您還可以指明您是否要匹配派生的活動(dòng)。例如,如果您要匹配所有活動(dòng),則應(yīng)當(dāng)使用 System.ComponentModel.Activity 類型并將 MatchDerivedTypes 設(shè)置為 True。這樣就能匹配所有基礎(chǔ)活動(dòng)類以及由其派生的所有活動(dòng)。您還可以將此信息添加到 ActivityTrackPoint 的 MatchingLocations 集合以指明您要跟蹤這些事件,或者將此信息添加到 ExcludedLocations 集合以指明該數(shù)據(jù)不應(yīng)被收集。
為了進(jìn)行更詳細(xì)的控制,您可以指定為跟蹤數(shù)據(jù)必須滿足的條件(以屬性等式的形式)。例如,您可能選擇僅當(dāng) SendEmail 活動(dòng)的優(yōu)先級(jí)屬性設(shè)置為 High 時(shí)才跟蹤電子郵件。圖 3 顯示了這樣一個(gè)示例。
您還能夠以屬性值的形式從活動(dòng)或工作流提取數(shù)據(jù)。例如,當(dāng)在工作流中到達(dá)您的匹配位置時(shí),您可以跟蹤 SendEmail 活動(dòng)的 To 和 Subject 屬性??梢酝ㄟ^將 ActivityDataTrackingExtract 或 WorkflowDataTrackingExtract 項(xiàng)添加到 ActivityTrackPoint 的 Extracts 集合來實(shí)現(xiàn)此跟蹤。每個(gè) ActivityDataTrackingExtract 都可識(shí)別要提取并發(fā)送到跟蹤服務(wù)的成員。將數(shù)據(jù)提取添加到活動(dòng)跟蹤點(diǎn),這樣被跟蹤的 To 和 Subject 屬性就如下所示:actTrack.Extracts.Add(new ActivityDataTrackingExtract("To"));actTrack.Extracts.Add(new ActivityDataTrackingExtract("Subject"));
 
三種類型中最靈活的是可以識(shí)別最后跟蹤點(diǎn)的 UserTrackPoint。有時(shí),您需要跟蹤來自工作流但不可用作活動(dòng)屬性的數(shù)據(jù)?;蛘呖赡苄枰褂?ActivityTrackingLocation 中簡單條件支持以外的邏輯。在這種情況下,您可以調(diào)用 ActivityExecutionContext 或 Activity 類中的 TrackData 方法。這使您可以將數(shù)據(jù)與數(shù)據(jù)項(xiàng)的可選密鑰或名稱發(fā)送到跟蹤偵聽器。對(duì)于接收該數(shù)據(jù)的跟蹤服務(wù),必須定義具有正確匹配位置的 UserTrackPoint。您還可以定義工作流和活動(dòng)數(shù)據(jù)提取,以便在 UserTrackPoint 匹配時(shí)跟蹤工作流或當(dāng)前活動(dòng)的屬性。
SQL 跟蹤服務(wù)
Windows Workflow Foundation 包括 SQL Server 跟蹤服務(wù),該服務(wù)使您能夠定義某個(gè)工作流類型的跟蹤配置文件并將其部署到 SQL Server。在運(yùn)行時(shí),跟蹤服務(wù)使用該配置文件以配置跟蹤偵聽器。SQL Server 跟蹤服務(wù)包括幾個(gè)出色的功能,如配置文件版本管理、配置文件更新通知和數(shù)據(jù)劃分。
通過調(diào)用 UpdateTrackingProfile 存儲(chǔ)過程并在系列化配置文件中進(jìn)行傳遞,可將跟蹤配置文件部署到 SQL 跟蹤服務(wù),其中包括工作流類型信息和版本號(hào)。您可以使用此存儲(chǔ)過程來插入特定于您的工作流類型的跟蹤配置文件,但每次更新配置文件時(shí)您必須使用唯一的版本號(hào)。我前面所談到的 TrackingProfileSerializer 使您能夠獲得配置文件的 XML 文本,這樣,您就能將其傳遞到存儲(chǔ)過程。
如果您沒有為您的工作流類型指定跟蹤文件,SQL 跟蹤服務(wù)將使用 UseDefaultProfile 設(shè)置以確定它是否應(yīng)為跟蹤偵聽器提供默認(rèn)的配置文件。默認(rèn)配置文件可跟蹤工作流的所有狀態(tài)事件和所有活動(dòng)。它還包括匹配位置,以跟蹤所提交的任何用戶跟蹤事件。如果您不需要此默認(rèn)行為,當(dāng)配置 SQL 跟蹤服務(wù)時(shí),則需要將 UseDefaultProfile 屬性設(shè)置為 False。只有指定了配置文件的那些工作流類型才被跟蹤。
為了確保跟蹤服務(wù)是最新的,跟蹤偵聽器會(huì)定期詢問各跟蹤服務(wù)所收到的配置文件。為了避免重復(fù)加載或創(chuàng)建跟蹤配置文件,跟蹤服務(wù)可以實(shí)現(xiàn) IProfileNotification 接口。為此定義了兩種事件:ProfileUpdated 和 ProfileRemoved。當(dāng)跟蹤服務(wù)實(shí)現(xiàn)此接口時(shí),跟蹤偵聽器不會(huì)查詢更新配置文件信息,除非發(fā)生這些事件之一。為了支持此模型,SQL Server 跟蹤服務(wù)會(huì)定期查詢數(shù)據(jù)庫(默認(rèn)情況下,每 60 秒查詢一次)以確定工作類型的跟蹤配置文件是否已被更新或刪除。您可以配置服務(wù)查詢更新的頻率,方法是將 ProfileChangeCheckInterval 屬性設(shè)置為表示輪詢之間微秒數(shù)的值。
由于在運(yùn)行環(huán)境中,跟蹤數(shù)據(jù)可以迅速累積,SQL 跟蹤服務(wù)支持?jǐn)?shù)據(jù)劃分。您可以通過配置來按天、周、月或年來劃分?jǐn)?shù)據(jù),服務(wù)將會(huì)為各時(shí)間段創(chuàng)建跟蹤表。另外,您可以控制是按需移動(dòng)數(shù)據(jù)(這樣就可以為其預(yù)定停機(jī)時(shí)間),還是自動(dòng)移動(dòng)數(shù)據(jù)(當(dāng)工作流完成時(shí))。為了配置此設(shè)置,您要將 SQL Server 跟蹤服務(wù)的 PartitionOnCompletion 屬性設(shè)置為“true”,以指明各工作流完成時(shí)應(yīng)被移動(dòng)到相應(yīng)的跟蹤分區(qū)。為了對(duì)數(shù)據(jù)進(jìn)行手動(dòng)分區(qū),您可以調(diào)用跟蹤數(shù)據(jù)庫中的 PartitionCompletedWorkflowInstances 存儲(chǔ)過程。
查詢跟蹤數(shù)據(jù)
當(dāng)您使用 SQL 跟蹤服務(wù)收集數(shù)據(jù)時(shí),數(shù)據(jù)被存儲(chǔ)在 SQL Server 中,這意味著您可以使用傳統(tǒng)的報(bào)告工具查看數(shù)據(jù)和進(jìn)行分析。但在某些情形下,您需要查詢應(yīng)用程序中的工作流數(shù)據(jù)。您不必編寫 SQL 查詢和確定數(shù)據(jù)庫中的正確關(guān)系,Windows Workflow Foundation 包含了跟蹤查詢編程接口,使您能夠?yàn)楣ぷ髁鲗?shí)例搜索跟蹤信息。該信息作為類返回,提供了對(duì)所有跟蹤的事件和您的跟蹤配置文件指定的數(shù)據(jù)的訪問。
SqlTrackingQuery 類使您既可以使用工作流的實(shí)例 ID 來嘗試加載特定工作流實(shí)例的跟蹤數(shù)據(jù),也可以使用離散參數(shù)集來查詢工作流列表。當(dāng)加載特定實(shí)例時(shí),您使用 TryGetWorkflow 方法,該方法返回指明請(qǐng)求是否成功的布爾值。要查詢多個(gè)工作流,請(qǐng)使用 GetWorkflows 方法,該方法需要一個(gè) SqlTrackingQueryOptions 實(shí)例。
查詢選項(xiàng)使您能夠定義在跟蹤數(shù)據(jù)庫中搜索工作流時(shí)要使用的參數(shù)。最簡單的選項(xiàng)包括最小和最大日期值以及工作流類型和狀態(tài)。例如,您可以配置選項(xiàng)以搜索所有與您的工作流類型匹配的工作流,工作流具有 Completed 狀態(tài),日期位于當(dāng)前日期和一周前的日期之間。這使您能夠檢索關(guān)于工作流類型和生成方式的目標(biāo)信息。
我已經(jīng)介紹了讓您指明所關(guān)注的失敗條件的跟蹤配置文件。使用圖 4 顯示的代碼,您可以在數(shù)據(jù)庫中查詢所有終止工作流的實(shí)例,并輸出異常詳細(xì)信息。請(qǐng)注意異常詳細(xì)信息被作為跟蹤的終止事件的事件參數(shù)包含在跟蹤信息中。
您還可以根據(jù)提取的值進(jìn)行搜索。例如,如果您配置了跟蹤配置文件以提取 SendEmail 活動(dòng)的 To 地址,則可以編寫查詢以返回工作流實(shí)例,其中 To 地址與確定的值(如特定的員工或合作伙伴)相匹配。以下代碼是使用 SqlTrackingQueryOptions 中的 TrackingDataItemValue 項(xiàng)根據(jù)提取的值優(yōu)化對(duì)特定項(xiàng)的搜索的示例:SqlTrackingQueryOptions options = new SqlTrackingQueryOptions();TrackingDataItemValue item = new TrackingDataItemValue("sendEmail1", "To", "highpriority@example.com");options.TrackingDataItems.Add(item);SqlTrackingQuery query = new SqlTrackingQuery(connectionString);IList<SqlTrackingWorkflowInstance> workflows =query.GetWorkflows(options);
 
如果選擇直接查詢 SQL Server 數(shù)據(jù)庫以進(jìn)行報(bào)告或執(zhí)行其他操作,則應(yīng)當(dāng)使用在表中定義的視圖而不直接使用表。通常,這是一個(gè)不錯(cuò)的做法,當(dāng)視圖要包含來自所有已創(chuàng)建的跟蹤分區(qū)的數(shù)據(jù)時(shí),尤為重要。通過使用視圖,不再需要自己合并所有這些表中的數(shù)據(jù)。
自定義跟蹤服務(wù)
跟蹤數(shù)據(jù)直至其進(jìn)入 SQL Server 數(shù)據(jù)庫是一個(gè)重要用例,而且可能是最常見的用例,它不是使用跟蹤信息的唯一情形。因?yàn)樗且豁?xiàng)通用要求,Microsoft 決定將這項(xiàng)豐富的服務(wù)包含在 Windows Workflow Foundation 中。然而,這類具有廣泛用途的服務(wù)必須盡可能通用。這意味著在許多情況下,它可能不適合。在這種情況下,您可以創(chuàng)建自定義跟蹤服務(wù)。
在工作流解決方案中有許多使用自定義跟蹤服務(wù)可滿足的要求。在此,我將討論創(chuàng)建您自己的跟蹤服務(wù)的基本知識(shí),并提供一些符合通用要求的自定義服務(wù)的示例。需要記住的重要一點(diǎn)是跟蹤是您對(duì)工作流的監(jiān)控。一旦理解了借助跟蹤配置文件配置跟蹤服務(wù)的方式,就可以獲得所需的結(jié)果,接下來就是自定義的服務(wù)應(yīng)如何使用或表示跟蹤的信息。
為了創(chuàng)建自定義跟蹤服務(wù),您需要完成兩件事情。首先,要確定如何為您的服務(wù)創(chuàng)建跟蹤配置文件。某些情況下,在所有工作流類型中,配置文件都可能是靜態(tài)的和不變的。在這種情況下,您可以在代碼中創(chuàng)建配置文件,當(dāng)需要配置文件時(shí),只需將其返回至運(yùn)行庫即可。然而,如果您需要跟蹤服務(wù)支持多個(gè)配置文件或不同版本的配置文件,則需要一種存儲(chǔ)該信息和從您的跟蹤服務(wù)中檢索該信息的方法。
接下來,您要實(shí)現(xiàn)兩個(gè)提供您的服務(wù)的運(yùn)行時(shí)行為的類:跟蹤服務(wù)和跟蹤通道。該跟蹤服務(wù)類作為工作流運(yùn)行時(shí)服務(wù),它是主機(jī)應(yīng)用程序的直接接口和與您的跟蹤服務(wù)交互的運(yùn)行庫。您要?jiǎng)?chuàng)建該類的實(shí)例并使用代碼或配置將其添加到工作流運(yùn)行庫中,與任何其他服務(wù)一樣。
該跟蹤服務(wù)類有以下兩種主要功能:為跟蹤偵聽器提供跟蹤配置文件,并提供偵聽器可向其寫入數(shù)據(jù)的跟蹤通道。跟蹤通道是您實(shí)現(xiàn)的用于接收和處理跟蹤數(shù)據(jù)的類。它可以在存儲(chǔ)區(qū)域(如 SQL Server 或 Windows 事件日志)之外寫入該數(shù)據(jù);可以為操作引發(fā)事件,如 Windows Management Instrumentation (WMI) 事件;還可以將數(shù)據(jù)發(fā)送回跟蹤服務(wù)以將其保存在內(nèi)存中并使其可供主機(jī)應(yīng)用程序使用。當(dāng)然,還有其他一些選項(xiàng),您使用數(shù)據(jù)的方式將取決于您的需求和要求。您的自定義跟蹤服務(wù)將按它們所使用的跟蹤配置文件以及它們處理所接收的數(shù)據(jù)的方式加以區(qū)分。
因?yàn)榫哂幸韵聝煞N簡單方法,所以跟蹤通道是最方便的起點(diǎn):Send 和 InstanceCompletedOrTerminated。您的跟蹤服務(wù)應(yīng)為各工作流實(shí)例提供跟蹤通道,為各請(qǐng)求提供跟蹤通道的唯一實(shí)例是一種通用做法。通常,您要提供將 TrackingParameters 作為參數(shù)的構(gòu)造函數(shù),在實(shí)現(xiàn)其他方法時(shí)您可能需要此信息。TrackingParameters 類有關(guān)于要被跟蹤的工作流實(shí)例(如實(shí)例 ID)、對(duì)根活動(dòng)定義的訪問的信息,以及關(guān)于父活動(dòng)和工作流調(diào)用(如果該工作流不是從其他工作流中調(diào)用的)的信息。
InstanceCompletedOrTerminated 方法使您能夠在活動(dòng)完成時(shí)跟蹤服務(wù)以獲得通知,這樣它就能清除與跟蹤工作流相關(guān)的所有資源。通常,這需要按照 TrackingParameters 提供的內(nèi)容訪問工作流實(shí)例 ID,因?yàn)?InstanceCompletedOrTerminated 方法不帶任何參數(shù)。
可為跟蹤配置文件中所請(qǐng)求的每一跟蹤記錄調(diào)用您的跟蹤通道的 Send 方法。與配置文件類似,也存在工作流、活動(dòng)和由基類 TrackingRecord 派生的用戶跟蹤記錄。在 Send 方法中,您要檢查已提交了哪種類型的跟蹤記錄,然后進(jìn)行相應(yīng)地處理。例如,如果您知道您的跟蹤配置文件沒有指明所關(guān)注的用戶跟蹤事件,您就無需在您的跟蹤通道中處理用戶跟蹤記錄。
跟蹤服務(wù)類本身負(fù)責(zé)管理跟蹤配置文件。跟蹤服務(wù)基類提供了幾種檢索配置文件的方法,使您能夠根據(jù)工作流類型和工作流實(shí)例管理配置文件。這意味著您的服務(wù)可以返回相應(yīng)的配置文件,范圍從對(duì)所有工作流都相同的配置文件到對(duì)各工作流實(shí)例是唯一的配置文件。
對(duì)于 GetProfile 方法,存在兩種重載。一種重載需要實(shí)例 ID,另一種重載需要類型和配置文件版本號(hào)。另外,TryGetProfile 也需要類型信息。在所有這些情況下,您的自定義跟蹤服務(wù)的工作就是返回與類型或?qū)嵗噙m應(yīng)的跟蹤配置文件。
此外,還存在一種稱為 TryReloadProfile 的方法,如果存在更新的配置文件,該方法將進(jìn)行運(yùn)行時(shí)調(diào)用以獲得該文件。為了確保及時(shí)更新,跟蹤偵聽器要定期向您的跟蹤服務(wù)詢問以確定是否使用更新的配置文件。無需在每次需要時(shí)創(chuàng)建新的配置文件或查找配置文件,您可以在您的自定義跟蹤服務(wù)中實(shí)現(xiàn) IProfileNotification 接口。IProfileNotifcation 接口包括以下兩種事件:ProfileUpdated 和 ProfileRemoved。當(dāng)您在您的跟蹤服務(wù)中實(shí)現(xiàn)此接口時(shí),跟蹤偵聽器不再進(jìn)行更新輪詢。取而代之的是,在該接口的事件發(fā)生過程中它要等待所有更新的通知。
在本專欄的代碼下載中包含了幾個(gè)示例跟蹤服務(wù)。當(dāng)前狀態(tài)示例使用跟蹤以獲得狀態(tài)機(jī)工作流的當(dāng)前狀態(tài),并使其可供主機(jī)應(yīng)用程序使用。該服務(wù)的跟蹤配置文件包含針對(duì) State 活動(dòng)執(zhí)行狀態(tài)的活動(dòng)跟蹤點(diǎn)。當(dāng)收到活動(dòng)跟蹤記錄時(shí),跟蹤通道會(huì)使用當(dāng)前狀態(tài)名更新跟蹤服務(wù)類中的詞典。該示例是一個(gè)服務(wù)示例,對(duì)于所有工作流都有相同配置文件,并將數(shù)據(jù)寫回服務(wù)以便由主機(jī)應(yīng)用程序查詢。
包含在代碼下載中的另一個(gè)示例跟蹤服務(wù)旨在解決 Windows Workflow Foundation 中開發(fā)人員常見的一種問題??紤]到工作流執(zhí)行以及與主機(jī)應(yīng)用程序分離方式的性質(zhì),獲得對(duì)運(yùn)行工作流的引用和提取屬性值不是一個(gè)簡單過程。這是一個(gè)常見要求,特別是在 ASP.NET 情形中。一旦 ManualWorkflowScheduler 完成在工作流中執(zhí)行相應(yīng)步驟,可能需要使用工作流的屬性值更新用戶接口。
使用 CallExternalMethod 活動(dòng)可傳遞工作流中的信息,但這并不總是一種理想的解決方案,而且在大型項(xiàng)目中被證明是難以承受的。工作流屬性跟蹤服務(wù)示例使用跟蹤來解決此問題。在此跟蹤服務(wù)中,對(duì)于每種工作流類型,返回的配置文件是不同的,以便反映工作流中的不同屬性。使用反射構(gòu)建工作流數(shù)據(jù)跟蹤提取集合,并將它們添加到活動(dòng)跟蹤點(diǎn)。跟蹤的位置位于各活動(dòng)的 Closed 事件中。因此,當(dāng)各活動(dòng)結(jié)束后,來自工作流實(shí)例的屬性值將被提取,并發(fā)送到跟蹤通道。通道將更新服務(wù)中的詞典,使這些值可供主機(jī)應(yīng)用程序使用。
這是兩個(gè)相當(dāng)簡單的自定義跟蹤服務(wù)的示例,但二者均是針對(duì)開發(fā)人員常見情形,提供了簡單、可重復(fù)使用的實(shí)現(xiàn),并充分利用了現(xiàn)有跟蹤基礎(chǔ)結(jié)構(gòu)。如果缺乏構(gòu)建基礎(chǔ),這些挑戰(zhàn)將會(huì)更大,需要更多的自定義代碼,而解決方案也可能不一致。
正如您所看到的,Windows Workflow Foundation 中的跟蹤服務(wù)非常靈活,有助于應(yīng)對(duì)大量不同的業(yè)務(wù)要求。跟蹤對(duì)于工作流的可視性至關(guān)重要,自定義跟蹤服務(wù)是您在應(yīng)用程序中充分發(fā)揮這種可視性的“利器”。
將您想詢問的問題和提出的意見發(fā)送至:mmnet30@microsoft.com mmnet30@microsoft.com.
NEW:Explore the sample code online! - or - 代碼下載位置:Foundations2007_03.exe (178KB)
Matt Milner是一位獨(dú)立的軟件顧問和 PluralSigh 的教師,專門從事 關(guān)于 Microsoft 技術(shù)(包括 .NET、Web 服務(wù)、Windows Workflow Foundation、Windows Communication Foundation 和 BizTalk Server)的講授。Matt 與其妻子 Kristen 和兩個(gè)孩子居住在明尼蘇達(dá)。您可通過 Matt 在pluralsight.com/blogs/matt 開設(shè)的博客與他聯(lián)系。
 摘自 March 2007 期刊 MSDN Magazine.
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SQL Server AlwaysOn架構(gòu)及原理
WF學(xué)習(xí)系列之一:WF基本知識(shí)點(diǎn)概述 - 毛毛的小窩 — 關(guān)注技術(shù)交流、讓我們一起成長 -...
五、性能監(jiān)視(2)Windows性能日志
配置應(yīng)用程序塊
SQL Server 2008數(shù)據(jù)庫實(shí)用教程-第10章
IT行業(yè)公司計(jì)算機(jī)人員崗位工作職責(zé)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服