狀態機器工作流程服務範例

這個範例會示範如何建立使用狀態機器工作流程的工作流程服務,示範如何實作使用狀態機器工作流程的計算機,以及示範其中狀態會自動儲存的長時間執行處理序。當您重新啟動工作流程服務時,因為工作流程的狀態已經獲得維護,所以用戶端能夠與相同的工作流程服務執行個體進行通訊。此範例也會示範如何強制執行合約中的應用程式層級通訊協定,以便在未預期地對服務呼叫某個作業時,工作流程得以引發例外狀況。

Bb410774.note(zh-tw,VS.90).gif注意:
要建置和執行這個範例,必須安裝 .NET Framework version 3.5。要開啟專案和方案檔,必須要有 Visual Studio 2008。

如需 設定這個範例的詳細資訊,請參閱 Windows Communication Foundation 範例的單次安裝程序

服務會實作 ICalculator 服務合約,如同下列範例程式碼所示。

[ServiceContract(Namespace = "http://Microsoft.WorkflowServices.Samples")]
public interface ICalculator
{
    [OperationContract()]
    int PowerOn();
    [OperationContract()]
    int Add(int value);
    [OperationContract()]
    int Subtract(int value);
    [OperationContract()]
    int Multiply(int value);
    [OperationContract()]
    int Divide(int value);
    [OperationContract()]
    void PowerOff();
}

此範例會實作一組狀態,其中每個狀態都有一組事件處理常式。每個事件處理常式包含會對 ICalculator 合約實作作業的 Receive 活動。由於處於已指定狀態,所以狀態機器工作流程能夠接受 Receive 活動在該狀態所實作的作業集合。這樣便有助於強制執行應用程式層級通訊協定。

Web.config 檔會定義服務的繫結,並且會公開 (Expose) 兩個具有兩種不同繫結的端點:啟用 Cookie 的 BasicHttpContextBinding,以及適用於不想使用 BasicHttpContextBinding 之用戶端的 WSHttpContextBindingWSHttpContextBinding 會協助維護用來將要求路由至特定工作流程執行個體的內容。

使用網際網路資訊服務 (IIS) 設定服務

  1. 執行 Windows Communication Foundation 範例的單次安裝程序中所列的安裝指示。

  2. 在 IIS 中,啟用 ServiceModelSamples 虛擬目錄上的 Windows 驗證。

    若要在 IIS 5.1 或 6.0 中啟用 Windows 驗證:

    1. 開啟 [命令提示字元] 視窗,輸入:start inetmgr 以開啟網際網路資訊服務 (IIS) MMC 嵌入式管理單元。
    2. 以滑鼠右鍵按一下 [預設的網站] 中的虛擬根目錄 [ServiceModelSamples],再按一下 [屬性],然後按一下 [目錄安全性] 索引標籤。
    3. 按一下 [驗證及存取控制] 之下的 [編輯]。
    4. 選取 [驗證方法] 對話方塊中的 [整合式 Windows 驗證]。

    若要在 IIS 7.0 中啟用 Windows 驗證:

    1. 開啟 [命令提示字元] 視窗,輸入start inetmgr 以開啟網際網路資訊服務 (IIS) MMC 嵌入式管理單元。
    2. 選取 [預設的網站] 中的 [ServiceModelSamples] 虛擬根目錄。
    3. 在 [ServiceModelSamples] 主窗格中,按兩下 [IIS] 群組中的 [驗證]。
    4. 選取 [Windows 驗證] 並選取 [啟用] 動作。
  3. 建置專案。專案會建置和更新 ServiceModelSamples。

  4. 若要允許存取長期存放區:

    1. 執行位於 Windows Communication Foundation 範例的單次安裝程序主題中的 CreateStores.cmd 指令碼。這個範例會使用 NetFx35Samples_ServiceWorkflowStore 資料庫。
    2. 將 ASP.NET 使用者帳戶設定為 SQL Server 使用者群組成員。
  5. 若要確定已正確安裝服務,請將瀏覽器指向位址:https://localhost/ServiceModelSamples/service.svc。您應該會看到服務的說明網頁。若要檢視 Web 服務描述語言 (WSDL),請輸入 https://localhost/ServiceModelSamples/service.svc?wsdl。

  6. 若要執行這個範例,您必須使用計算機用戶端範例。這是使用 Windows Presentation Foundation (WPF) 建立做為服務之用戶端的計算機使用者介面。您可以使用對應至服務所提供繫結的不同端點。若要變更繫結,請按一下 [端點] 功能表項目,然後選取適當的繫結,即 BasicHtttpContextBindingWSHttpContextBinding

  7. 若要測試服務的永久性特質,請在計算機用戶端執行時關閉該用戶端,並再重新開啟。計算機用戶端會再與相同的服務執行個體通訊,並在底部顯示執行個體識別碼。計算機用戶端會使用名為 Client.ctx 的文字檔,來儲存在第一次發出呼叫時出現在永久性位置的內容 (在此範例中,是指範例的 \bin 目錄)。當您重新開啟用戶端時,它會檢查檔案是否存在。如果該文字檔存在,它就會將儲存的內容套用在將要建立的通道。如果工作流程服務已完成,而您開啟用戶端時 Client.ctx 檔案仍在 \bin 目錄中,它會嘗試將內容套用至通道。如果您要與其通訊的工作流程執行個體不存在,就會收到錯誤訊息。請刪除檔案然後再試一次。

  8. 您也可以重新啟動 IIS 以回收工作流程服務。因為您在每一個作業後都要使用持續性存放區,所以會儲存服務的狀態。因此,當您嘗試在 IIS 已重新啟動後從用戶端與服務通訊時,此工作流程基礎結構會接收來自持續性存放區的工作流程執行個體,這樣您就可以與相同的執行個體進行通訊。

    Bb410774.note(zh-tw,VS.90).gif注意:
    當您重新啟動 IIS 後初次叫用作業時,會收到 MessageSecurityException 例外狀況,這是通道上已過期的安全性權杖所造成的。叫用其他作業就會成功。

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.