循序工作流程服務範例

這個範例示範如何使用循序工作流程建立工作流程服務。此範例示範適當建立服務合約的方式,這是所謂「工作流程第一」模式的服務撰寫方法。此範例會建立 ICalculator 合約,然後在建置工作流程時於工作流程中經過實作。

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

將計算機實作成工作流程,會帶來下列好處:

  • 您可以啟動長時間執行的處理序,以自動儲存工作流程狀態。這表示當您重新啟動工作流程服務時,用戶端就能夠與相同的工作流程服務執行個體進行通訊。
  • 合約中的應用程式層級通訊協定會強制執行。如果作業意外呼叫這個服務,工作流程就會引發例外狀況。

循序工作流程服務範例

在這個工作流程中,「接收」活動 PowerOn 具有名為 CanCreateInstance 的屬性,其已標記為 true。這表示會在用戶端呼叫 PowerOn 作業時建立此服務的執行個體。用戶端會接收內容做為對此作業回覆的一部分。從此以後,就可以呼叫工作流程中的任何其他作業。就用戶端所呼叫的每一項作業而言,其內容會在通道上傳送,因此可以將作業路由至正確的執行個體。呼叫 PowerOff 作業時,會設定導致工作流程結束 while 迴圈的布林值。

下列範例程式碼示範實作於服務專案 Program.cs 檔案中的 WorkflowServiceHost 引動過程模式。

WorkflowServiceHost workflowHost = new WorkflowServiceHost(typeof(Microsoft.WorkflowServices.Samples.SequentialCalculatorService));
workflowHost.Open();

在前面的範例程式碼中,WorkflowServiceHost 的建構函式會接受工作流程類型做為輸入,然後將它開啟以接聽訊息。

這個範例也包含用戶端應用程式,它會叫用計算機服務上的作業。用戶端應用程式是循序工作流程,會進行一系列作業引動過程。用戶端工作流程會使用「傳送」活動來叫用工作流程上的作業。用戶端專案包含 ICalculator 服務的參考,Send 活動可以使用這個服務來顯示介面,供您選取要叫用的適當作業。

設定、建置及執行專案

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

  2. 若要安裝持續性提供者,請執行 Windows Communication Foundation 範例的單次安裝程序主題中的 CreateStores.cmd 指令碼。

  3. 這個範例會使用 NetFx35Samples_ServiceWorkflowStore 資料庫。其中不包含用戶端工作流程的持續性存放區。這個範例假設您用來安裝資料庫的是 SQL Server Express。如果您想要將資料庫安裝在 SQL Server 中,請變更 App.config 檔案中的連線字串。

  4. 如果不要使用持續性提供者,請將 App.config 檔案的 <WorkflowRuntime> 區段標記為註解。

  5. 以 Administrators 群組中的使用者身分執行範例。如果您正在使用 Windows Vista,請以滑鼠右鍵按一下用戶端執行檔,然後按一下 [以系統管理員身分執行]。

  6. 應用程式開始執行後,用戶端工作流程就會傳送一組計算機作業,然後完成工作流程。您可以按 ENTER 鍵來傳送另一組計算機作業。

  7. 若要測試這項服務的長時間執行性質,請在用戶端應用程式中放置中斷點。當到達 Visual Studio 中的中斷點時,先關閉服務應用程式,並再重新啟動。釋放用戶端上的中斷點之後,用戶端工作流程還是會跟服務上的同一個工作流程執行個體溝通。您可能也想要將範例分為兩個方案,以便測試服務的回收處理。

在不同的電腦上執行範例

  1. 編輯服務及用戶端的組態檔,並確定您已變更端點位址中的伺服器名稱。將伺服器名稱從 localhost 變更為要執行服務的電腦名稱。

  2. 服務會使用連接埠 8888,因此必須在防火牆中開啟這個連接埠。請按一下 Windows [控制台] 中的 [Windows 防火牆],再按一下 [新增連接埠],然後新增連接埠 8888。或者,您也可以在預設的連接埠上執行服務。若要這麼做,請從端點位址中移除 :8888

  3. 編輯用戶端組態檔,並將下列項目新增為 <endpoint> 項目的子項目。

    <identity>
        <UserPrincipalName value=”*@<Domain Name in which your server is running” />
    </identity>
    

    若要判斷網域名稱,請在您要執行服務的電腦上啟動服務。在別台電腦上的命令提示字元視窗中,執行下列命令。

    svcutil.exe http://<serverName>:8888/servicehost/Calculator.svc

    這個命令會產生 .cs 檔案和 output.config 檔案。在該組態檔的 <endpoint> 項目中,將 <identity> 項目複製到您的用戶端組態檔。

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