工作流程管理服務
「工作流程管理服務」(WMS) 是一種 Windows 服務,它可以為工作流程服務執行個體提供下列管理服務:
啟動工作流程服務執行個體。當執行個體可啟動時,WMS 會啟動執行個體儲存區中的工作流程服務執行個體。若執行個體成為可執行,且符合該執行個體的服務主機未在本機電腦上執行,系統就會將執行個體儲存區中的工作流程服務執行個體視為可啟動。下列清單包含執行個體成為可執行的原因:
等候延遲活動完成且延遲活動完成時,執行個體被解除載入並放入持續性資料庫。
執行個體已載入時,服務主機關閉。
執行個體上有過期的執行個體鎖定。
執行使用者控制命令。執行個體儲存區的執行個體控制提供者會將從 Windows PowerShell 執行個體控制 Cmdlet 收到的命令新增至執行個體儲存區中的佇列。此佇列是由執行個體控制提供者建立和維護。WMS 會從佇列擷取並執行命令,如果命令執行成功,就會從佇列刪除命令。
本主題的其餘部分會詳細說明這些服務。若要深入了解安裝和設定 WMS 的方式,請參閱安裝與設定工作流程管理服務。
工作流程服務執行個體的啟用
根據預設值,WMS 會自動探索所需的執行個體儲存區,以監控可啟動的工作流程執行個體。方法是在服務啟動時以及在其中一個組態檔所有變更時,掃描根目錄、網站與應用程式等級的 Web.config 檔案。您也可以指定想要讓 WMS 監控的特定執行個體儲存區,而不是讓 WMS 自動探索執行個體儲存區。
WMS 會為探索到的每個執行個體儲存區建立 InstanceStore 物件以及訂閱 HasActivatableWorkflowEvent。當執行個體儲存區在儲存區中找到可啟動的工作流程執行個體時,會引發 HasActivatableWorkflowEvent。之後,執行個體儲存區會停止監控,直到在儲存區上呼叫 QueryActivatableWorkflowsCommand 一次為止。
當 WMS 收到 HasActivatableWorkflowEvent 時,就會針對執行個體儲存區執行 QueryActivatableWorkflowsCommand,以取得用來建立工作流程主機的啟動參數。
接著,WMS 會叫用應用程式 (其中包含需要被啟動之執行個體的服務) 支援的「服務管理服務」,然後將啟動參數傳遞給它。AppFabric 會自動將「服務管理服務」(WCF 服務) 新增至已啟用 serviceManagement 屬性的所有應用程式。「服務管理服務」會公開「服務啟用端點」,而 WMS 可透過利用網站名稱、虛擬應用程式路徑以及已知「服務啟用端點」位址所建構的位址來存取。WMS 會針對此端點使用 net.pipe 繫結。如需此服務的詳細資訊,請參閱Service 管理服務。
「服務管理服務」可使用從 WMS 收到的啟動參數,來啟動工作流程服務主機。服務主機會建立執行個體儲存區 (例如,「SQL 工作流程執行個體儲存區」),並叫用儲存區上的方法,以將工作流程服務執行個體從執行個體儲存區載入到記憶體。
警告
WMS 會立即選擇「SQL 工作流程執行個體儲存區」(SWIS) 行為與對應之組態檔中的執行個體儲存區定義的變更,並開始監控那些儲存區。帶是,應用程式將繼續使用在舊版組態檔之 SWIS 行為中指定的執行個體儲存區,直到應用程式定義域被回收。經過 httpRuntime 元素之 delayNotificationTimeout 屬性指定的時間間隔之後,應用程式定義域會被回收。例如,若 delayNotificationTimeout 是設定為 5000 (<httpRuntime delayNotificationTimeout = "5000" />),則應用程式定義域在經過另一個 5000 秒之後才會被回收。
警告
若停用包含 1000 個以上之服務的應用程式或應用程式集區,WMS 可能不會再啟用任何可啟用的服務執行個體。因應措施是先暫停屬於這些應用程式/應用程式集區之服務的執行個體,再停用應用程式/應用程式集區。
執行使用者控制命令
當您使用 Windows PowerShell Cmdlet 針對工作流程服務執行個體發出命令時,執行個體控制提供者會將命令新增至服務所使用之執行個體儲存區中的命令佇列。命令佇列是由執行個體控制提供者維護。
WMS 會自動探索所需的執行個體儲存區,以監控命令。方法是在啟動時以及在其中一個組態檔所有變更時,掃描根目錄、網站與應用程式等級的 Web.config 檔案。WMS 會為探索到的每個執行個體儲存區建立執行個體控制提供者,並定期輪詢提供者以取得命令。具體而言,WMS 會叫用執行個體控制提供者上的 BeginTryReceive 方法以接收命令。
執行個體控制提供者接著會擷取命令,但不會從執行個體儲存區的命令佇列中刪除,而是會將命令傳回給 WMS。提供者會將命令佇列中的命令短暫地鎖定一段時間。
WMS 接著會叫用工作流程服務主機所公開的適當「執行個體控制端點」(ICE) 方法,以針對目標工作流程服務執行個體執行命令。WMS 要求執行個體控制端點必須啟用 net.pipe 繫結並啟用傳輸安全性。WMS 會結合網站名稱、虛擬服務路徑以及已知 ICE 路徑,來建構端點位址。執行個體控制提供者可提供網站名稱與虛擬服務路徑資訊。ICE 繫結是以硬式編碼方式寫入 net.pipe 繫結。
若命令執行成功,WMS 叫用執行個體控制提供者上的 Complete 方法,而且提供者會將該命令從命令佇列移除。若命令執行失敗,WMS 會叫用與失敗相關之執行個體控制提供者上的 Abandon 方法,然後由提供者決定要將命令從命令佇列移除,或是將命令保留在命令佇列中以進行額外的嘗試。「SQL 工作流程執行個體儲存區」的執行個體控制提供者會嘗試命令五次,然後才會將命令從命令佇列移除。若 WMS 在執行命令時發生當機,鎖定最後會到期,而該命令稍後可由相同的 WMS 執行個體或其他 WMS 執行個體接手執行。
若 Microsoft Distributed Transaction Coordinator (MSDTC) 已啟用,且 MSDTC 已啟用輸入與輸出通訊,則執行個體控制命令會以交易式方式執行。例如,若暫停工作流程服務執行個體,則處理該命令之後,「IIS 管理員」會顯示 (或 Cmdlet 會傳回)「已暫停」狀態。但是,若 MSDTC 已停用或未正確設定,則執行個體控制命令會以非交易式方式執行。在此案例中,在執行個體被解除載入並放入持續性執行個體儲存區之前,其狀態不會更新為「已暫停」,因為其閒置時間已超過指定的時間間隔 (「閒置時解除載入」設定)。請注意,若變更 MSDTC 設定,您將需要重新啟動 WMS,服務才會使用更新的 MSDTC 設定。
提示
若發現一或多個執行個體控制命令的擱置狀態比預期久,您應該檢查 WMS 是否在伺服器陣列的每部主機上執行。若執行個體目前正在特定伺服器 (根據監控資訊) 上執行,而且針對該執行個體發出的控制命令未執行,您應該檢查 WMS 是否在該伺服器上執行。
警告
如果啟用「允許輸入」與「允許輸出」DTC 設定,工作流程管理服務會使用交易式命令。如果您停用 DTC,請確定您也明確停用這些設定,如此才會使用非交易式命令。
支援伺服器陣列環境
伺服器陣列中的每個節點通常都會執行一個 WMS 執行個體。WMS 執行個體可監控數個執行個體儲存區。一個節點能夠以不同的 Windows 身分識別來執行多個 WMS 執行個體。建議您讓節點上的每一執行個體儲存區只執行一個 WMS 執行個體。在監控相同執行個體儲存區的相同節點上執行多個 WMS 執行個體,可能會發生延展性問題。
先前在某一節點上執行的執行個體可能會由其他節點上的 WMS 接手,然後在該節點上啟動。如此可跨伺服器陣列來協助平衡 WMS 的工作負載。
當針對工作流程執行個體發出控制命令時,該工作流程執行個體可能會在陣列的任意位置執行,也可能不會。WMS 會將命令傳遞給執行工作流程的電腦,或是指示本機電腦載入工作流程並執行該命令。如此可讓您針對執行個體發出命令,而不必知道該執行個體在哪部電腦上執行。
相依功能
下列幾點適用於「工作流程管理服務」(WMS):
WMS 只會針對使用 WorkflowServiceHost 在 IIS/WAS 環境主控之工作流程服務的執行個體啟動和執行命令。WMS 不支援使用不同主機來主控或在不同主控環境中主控的工作流程服務。
WMS 會啟用使用執行個體儲存區來維持長期狀態持續性之工作流程服務的執行個體。
WMS 會啟動屬於提供「服務管理服務」之應用程式的工作流程服務的執行個體。WMS 會使用「服務管理服務」來啟動服務主機,服務主機接著會從執行個體儲存區載入執行個體。
WMS 要求將 net.pipe 繫結新增到網站,且在包含服務的應用程式上啟用 net.pipe 通訊協定。若未在應用程式上啟用 net.pipe 通訊協定,WMS 會在事件日誌中記錄錯誤。
WMS 會要求工作流程服務執行個體公開執行個體控制端點 (ICE)。WMS 會使用此端點來對工作流程服務執行個體發出命令 (例如「暫停」與「繼續」)。
WMS 可搭配執行個體儲存提供者與執行個體控制提供者隨附的任何執行個體儲存區使用。
WMS 要求當執行個體成為可啟動時,執行個體儲存區必須引發 HasActivatableWorkflowsEvent。
注意
如需 WMS 的安全性相關詳細資訊,請參閱持續性儲存區的安全性設定。
安全性
「工作流程管理服務」(WMS) 需要連線到工作流程服務主機公開的「執行個體控制端點」(ICE) 以控制工作流程服務執行個體,並連線到 Web 應用程式公開的「服務管理端點」以啟動工作流程服務主機,然後載入工作流程服務執行個體。AS_Administrators 群組可存取上述兩種端點。「AppFabric 工作流程管理服務」的安全性識別碼 (SID) 是此群組的成員。因此,您不必明確地將用於執行 WMS 的帳戶新增至 AS_Administrators 群組。
下列清單提供的指導方針,可用於保護 WMS 使用的執行個體儲存區與組態檔:
WMS 會將組態資訊 (包括連接字串) 從組態檔讀入記憶體。WMS 目前無法處理加密的連接字串,因此您必須以純文字格式輸入連接字串。惡意使用者可能從記憶體取得任何機密資訊 (例如,連接字串中的使用者名稱與密碼) 的存取權。因此,您不應該在組態檔中定義的連接字串中指定機密資訊。
建議您針對儲存在 Web.config 檔案中的連接字串使用整合式 Windows 驗證。若無法使用整合式 Windows 驗證,而您要在 Web.config 檔案中定義的連接字串中指定使用者名稱與密碼,請在組態檔上設定適當的 ACL (存取控制清單)。確定 AS_Administrators 群組具有 WMS 必須存取之 Web.config 檔案的存取權。但您必須注意,設定 ACL 無法防止惡意使用者從記憶體存取連接字串資訊。
將“;Encrypt=yes” 新增至 SQL 連接字串,以啟用加密的 SQL 通訊。若使用 SqlConnectionStringBuilder 類別來建置連接字串,請將 Encrypt 屬性設定為 true。如需有關在伺服器啟用加密通訊的詳細資訊,請參閱 https://go.microsoft.com/fwlink/?LinkID=187283 (可能為英文網頁)。若未以適當方式保護應用程式與 SQL Server 之間的通訊,惡意使用者將可以操控 SQL Server 資料庫或在其上執行命令。
命令佇列不會維護任何認證資訊。身為 AS_Administrators 群組 (對應到 WorkflowAdministrators SQL 角色) 成員的使用者,有權控制執行個體儲存區中的所有執行個體,而非任何特定的執行個體類型。因此,不想讓不同的使用者控制的執行個體,應儲存於不同的執行個體儲存區,而這些執行個體儲存區的 WorkflowAdministrators SQL 角色應對應到不同的 Windows 群組。
每次修改 Web.config 檔案時,WMS 都會讀取該檔案,並檢查是否新增儲存區定義至該檔案或是從該檔案移除儲存區定義。為了避免未經授權的使用者觸發 WMS 檔案處理,建議您限制對 Web.config 檔案的寫入權限。
依據追蹤等級,AppFabric 監控功能會大幅收集資料。建議您不要將監控與持續性儲存區放在同一個資料庫中。這樣當監控儲存區溢位時,才不會影響持續性子系統。
下表說明可限制對命令佇列與持續性資料庫之存取權的 SQL 角色。此資料表中的內容只適用於「SQL 工作流程執行個體儲存區」。
SQL 角色 | 描述 | Windows 群組 |
---|---|---|
WorkflowAdministrators |
此角色成員可將命令放入屬於持續性資料庫之一部分的命令佇列 (新增命令)。想要控制執行個體 (例如,透過使用 Windows PowerShell Cmdlet) 的使用者必須是此角色的成員。 |
AS_Administrators |
WorkflowManagementServiceUsers |
此角色的成員可將命令從命令佇列移出 (擷取命令)。用於執行 WMS 的帳戶必須是此角色的成員,WMS 才能擷取命令佇列中儲存的命令。 |
AS_Administrators |
WorkflowActivationUsers |
此角色的成員可啟動已放入持續性資料庫且準備執行的工作流程服務執行個體。 |
AS_Administrators |
InstanceStoreObservers |
此角色的成員可查詢執行個體儲存區以尋找執行個體,以及從儲存區中的命令佇列擷取命令。 |
AS_Administrators 與 AS_Observers |
InstanceStoreUsers |
此角色的成員可載入和儲存執行個體。載入與儲存動作是由執行工作流程的服務主機執行。 若服務 Service1 的執行個體是放入持續性執行個體儲存區 Store1,則執行服務主機的應用程式集區 AppPool1 就必須以擁有 Store1 使用者權限的身分識別來執行。 |
IIS_USRS |
如需持續性功能以案例為基礎的安全性指導方針,請參閱持續性儲存區的安全性設定。
另請參閱
概念
2012-03-05