分享方式:


執行個體查詢與控制

此範例顯示如何使用持續性儲存區查詢與控制提供者。查詢提供者公開 C# API,可讓使用者查詢持續性儲存區中儲存的執行個體。控制提供者公開 C# API,可讓使用者針對儲存在持續性儲存區中的執行個體發出控制命令 (暫停、繼續、取消、終止、刪除)。

此範例包含 WF 測試服務、用於查詢執行個體的 Windows 主控台應用程式,以及用於控制執行個體的 Windows 主控台應用程式。

注意

提供的範例僅適用於教學用途。請勿將範例用於生產環境,因為這些範例並未在生產環境中測試。Microsoft 不對這些範例提供技術支援。

必要條件

  • Internet Information Services (IIS) 7.0 版

  • 已初始化持續性儲存區

  • 在相同電腦中的 Visual Studio 2010 和 Microsoft AppFabric 1.1 for Windows Server

範例位置與檔案

Readme 文件位於 <範例>\Samples\Hosting\InstanceQueryAndControl。

執行此範例所需的所有檔案位於 <範例>\Samples\Hosting\InstanceQueryAndControl:

  • InstanceControl 資料夾包含執行個體控制範例應用程式所需的所有檔案。

  • InstanceQuery 資料夾包含執行個體查詢範例應用程式所需的所有檔案。

  • TestWorkflow 資料夾包含範例工作流程所需的所有檔案。

  • 方案檔案 InstanceQueryAndControl.sln 定義建置所有範例成品的方案。

設定並執行此範例

  1. 如果您尚未建立持續性儲存區,請在 Microsoft AppFabric 1.1 for Windows Server 安裝期間這樣做。

    1. 以系統管理員身分執行 C:\Program Files\Windows Server AppFabric\Microsoft.ApplicationServer.Configuration.exe。在 [設定工作者] 步驟中,選取 [設定持續性組態] 核取方塊。選取 [sqlStoreProvider] 做為持續性提供者,然後按一下 [設定]。

    2. 在 [持續性 SQL 儲存區組態] 視窗中,選取 [新增持續性儲存區至根 web.config] 與 [初始化持續性儲存區] 核取方塊。將持續性儲存區資料庫的名稱指定為 ApplicationServerWorkflowInstanceStore。按一下 [確定] 以建立指定名稱的持續性儲存區資料庫。如果您決定要選擇不同的資料庫名稱,則需要變更範例程式碼 (請參閱下方內容)。

  2. 如果您在 64 位元系統上執行此範例,請複製檔案 C:\Program Files\Windows Server AppFabric\Microsoft.ApplicationServer.StoreManagement.dll 到您的專案資料夾。

    注意

    步驟 3 中將會用到此路徑。

  3. 建置方案。

    1. 以系統管理員身分開啟 Visual Studio 2010:依序按一下 [開始]、[所有程式] 及 [Microsoft Visual Studio 2010]。在 [Microsoft Visual Studio 2010] 上按一下滑鼠右鍵,然後選取 [以系統管理員身分執行]。

    2. 開啟範例專案:在 Visual Studio 中,依序按一下 [檔案]、[開啟] 及 [專案/方案]。選取範例方案檔案 <samples>\Samples\InstanceQueryAndControl\InstanceQueryAndControl.sln。開啟該檔案時,Visual Studio 會警告您尚未針對範例服務建立本機 IIS URL。確認已建立新的虛擬目錄。

    3. 如果您在 64 位元系統上執行此範例,請為 InstanceQuery 與 the InstanceControl 專案執行下列步驟:在 Program.cs 檔案的第 17 行,將 Microsoft.ApplicationServer.StoreManagement.dll 檔案的路徑變更為您在步驟 2 中複製檔案的位置。

    4. 此範例假設工作流程保存在 SQL Express 主控的持續性資料庫 ApplicationServerWorkflowInstanceStore 中。您可以在 InstanceControl 專案之 Program.cs 的第 44 行、45 行和 InstanceQuery 專案之 Program.cs 的第 37、38 行中變更資料庫名稱與 SQL Server 執行個體。

    5. 按下 F6 以建置方案。這樣會自動將 TestWorkflow 應用程式部署至 IIS。

  4. 設定 TestWorkflow 應用程式。

    1. 開啟「IIS 管理員」:依序按一下 [開始]、[控制台]、[系統管理工具] 及 [Information Services (IIS) 管理員]。

    2. 設定正確的 AppPool,然後為網站啟用 net.pipe 通訊協定。

      • 在 IIS 的 [連線] 視窗中,依序選取節點 [<電腦>]、[網站]、[預設網站]。

      • 在 IIS 的 [動作] 窗格中,按一下 [進階設定]。

      • 將 [應用程式集區] 設定變更為 [ASP.NET v4.0]。

      • 將 [已啟用的通訊協定] 變更為 [http,net.pipe]。警告:逗號與 net.pipe 之間不能有空格。

      • 按一下 [確定]。

    3. 設定正確的 AppPool,然後為應用程式啟用 net.pipe 通訊協定。

      • 在 IIS 的 [連線] 視窗中,依序選取節點 [<電腦>]、[網站]、[預設網站]、[TestWorkflow]。

      • 在 IIS 的 [動作] 窗格中,按一下 [進階設定]。

      • 將 [應用程式集區] 設定變更為 [ASP.NET v4.0]。

      • 將 [已啟用的通訊協定] 變更為 [http,net.pipe]。警告:逗號與 net.pipe 之間不能有空格。

      • 按一下 [確定]。

  5. 建立 TestService 的執行個體。

    1. 開啟 WCF 測試用戶端。

      • 在「IIS 管理員」的 [連線] 視窗中,依序選取節點 [<電腦>]、[網站]、[預設網站]、[TestWorkflow]。

      • 在 [TestWorkflow] 上按一下滑鼠右鍵,然後選取 [切換到內容檢視]。

      • 在 [TestService.xamlx] 上按一下滑鼠右鍵,然後選取 [瀏覽]。網頁瀏覽器會啟動並顯示 TestService 的歡迎頁面。

      • 依照下列方式開啟 WCF 測試用戶端:開啟 WCF 測試用戶端。依序按一下 [開始]、[所有程式]、[Microsoft Visual Studio 2010]、[Visual Studio 工具]、[Visual Studio 命令提示字元 (2010)]。在命令提示字元中,執行 wcftestclient 命令。

      • 在網頁瀏覽器的 URL 視窗中,複製 TestService 的 URL (例如,"https://localhost/TestWorkflow/TestService.xamlx")。在 WCF 測試用戶端的 [我的服務專案] 上按一下滑鼠右鍵,然後選取 [新增服務]。當系統提示您輸入端點位址時,請貼上 TestService 的 URL。

    2. 依照下列方式叫用 TestService:

      • 在 WCF 測試用戶端視窗中,按兩下 [IService (BasicHttpBinding_IService)] 節點下的 [Invoke()] 節點。

      • 在 [叫用] 索引標籤上,按一下 [值] 欄中的 [(Null)] 欄位。將選項從 [(Null)] 變更為 [System.Nullable<System.Int32>]。現在展開 [名稱] 欄中的 [int] 節點。就會出現值為 0 的新資料列。

      • 按一下 [叫用]。這樣會建立執行長達 10 分鐘的 TestService 執行個體。

      • 將值變更為 1,然後按一下 [叫用]。這樣會建立將會立即完成的 TestService 執行個體。

      • 將值變更為 2,然後按一下 [叫用]。這樣會建立將會擲回例外狀況並暫停的 TestService 執行個體。

  6. 查詢執行個體。

    1. 在 Visual Studio 中,確定 [InstanceQuery] 是預設的啟始專案,然後按下 F5 來查詢執行個體。主控台視窗就會開啟並顯示您在步驟 5.b 中建立的三個執行個體。

    2. 或者,在命令提示字元中執行 InstanceQuery 命令:

      • 開啟命令提示字元。執行 <範例>\Samples\Hosting\InstanceQueryAndControl\InstanceQuery\bin\Debug\InstanceQuery.exe [List|Count|Group] 命令。
  7. 控制執行個體。

    1. 在命令提示字元中,執行 <範例>\Samples\Hosting\InstanceQueryAndControl\InstanceControl\bin\Debug\InstanceControl.exe <InstanceId> [Suspend|Resume|Cancel|Terminate|Delete] 命令。使用您之前建立之任一執行個體的 20 個字元的執行個體識別碼 GUID。

移除此範例

  1. 從持續性儲存區中刪除 TestWorkflow 服務的所有服務執行個體。開啟管理主控台視窗並執行下列命令:

    > powershell
    > import-module applicationServer
    > Get-ASAppServiceInstance -SiteName "Default Web Site" -VirtualPath "/TestWorkflow/TestService.xamlx" | Remove-AsAppServiceInstance
    

示範

此範例包含三個專案:

  • TestWorkflow 實作 WF 服務。該服務是在 IIS 中主控。每次叫用該服務時,就會建立該服務的新執行個體。透過 WCF 測試用戶端叫用該服務時,使用者必須將參數傳遞至該服務。根據該參數,執行個體會執行長達 10 分鐘、立即完成或擲回例外狀況。

  • InstanceQuery 實作的主控台應用程式會針對持續性儲存區發出查詢,並在畫面上顯示結果。使用者必須指定查詢類型、查詢參數以及持續性儲存區的連接字串。

  • InstanceControl 實作的主控台應用程式會針對位於持續性儲存區的執行個體發出控制命令。使用者必須指定命令類型、執行個體識別碼以及持續性儲存區的連接字串。

執行個體查詢範例應用程式

執行個體查詢範例應用程式示範 AppFabric 查詢提供者的功能與 API。查詢提供者允許使用者發出三種查詢類型:

  • 取得位於持續性儲存區且屬性符合查詢的執行個體清單。此查詢會傳回 instanceInfo 的陣列。

  • 取得位於持續性儲存區且屬性符合查詢的執行個體數目。此查詢會傳回 int32。

  • 取得位於持續性儲存區且屬性符合查詢的執行個體數目,然後根據定義的類別來予以分組。此查詢會傳回 groupingResult 類型的可列舉值。

對於每種查詢類型,查詢提供者都會提供可執行查詢的非同步 API。輸入與傳回類型會隨著查詢類型而有所不同。對於所有查詢類型,使用者都可以指定一組查詢篩選器。此範例將所有篩選設定為 Null,表示查詢將會挑選儲存區中的所有執行個體。除了查詢篩選器參數之外,使用者必須提供持續性儲存區的連接字串。此範例假設執行個體位於 DefaultSqlWorkflowInstanceStore 中。它也假設資料庫使用 Windows 整合式安全性來驗證資料庫存取。

要求執行個體清單時,使用者必須指定傳回的執行個體數目上限,以及應該如何排序執行個體。目前查詢提供者只能讓您依據 LastUpdatedTime 來排序,或傳回未排序的清單。

要求分組的執行個體計數時,使用者必須指定分組參數。這些參數必須以 List<GroupingMode> 的形式提供。第一個元素定義主要群組,而接下來的每個元素則定義子群組。

執行個體控制範例應用程式

執行個體控制範例應用程式示範 AppFabric 控制提供者的功能與 API。控制提供者允許使用者針對執行個體發出暫停、繼續、取消、終止或刪除命令。除了命令類型與執行個體識別碼之外,使用者必須提供服務識別碼 SiteName、RelativeApplicationPath 與 VirtualPath。WMS 需要那些參數,才能計算服務執行個體的控制端點 (只有「暫停」、「繼續」、「取消」與「終止」命令才需要服務識別碼。「刪除」命令不是針對控制端點發出,而是直接在資料庫中執行)。

除了查詢篩選器參數之外,使用者必須提供持續性儲存區的連接字串。此範例假設執行個體位於 DefaultSqlWorkflowInstanceStore 中。它也假設資料庫使用 Windows 整合式安全性來驗證資料庫存取。

請注意,執行個體控制範例應用程式會將所有「暫停」、「繼續」、「取消」或「終止」命令放入持續性儲存區的命令佇列。稍後才會執行命令。使用執行個體查詢範例應用程式,來查看命令是否已執行以及於何時執行。

請注意,只有在該執行個體已無放入佇列的其他擱置中命令時,才能將執行個體的命令放入佇列。

下表說明針對處於不同狀態之執行個體發出命令的效果:

目前狀態 暫停 繼續 取消 終止 刪除

執行中

暫停執行個體

無作用

取消執行個體

終止執行個體

從持續性儲存區移除執行個體

已暫停

無作用

繼續執行執行個體

取消執行個體

終止執行個體

從持續性儲存區移除執行個體

已完成

不允許

不允許

不允許

不允許

從持續性儲存區移除執行個體

警告

從持續性儲存區移除執行中的執行個體,可能會導致發生無法預期的行為。我們不建議您這樣做。

  2012-03-05