2010-07-21 57 views
1

是否可以使用標準創建WCF工作流(活動模板)工作流活動模板?如果是這樣,我可以在哪裏找到一些不使用標準WCF服務模板的示例(WCF工作流服務模板)?我可以使用標準工作流程活動模板創建WCF工作流程嗎?

說明:我試圖在運行時發現,加載和運行工作流,包括使用WCF活動的工作流。標準工作流程被編譯爲類型(這使得它們易於發現),但是「WCF工作流服務」模板是一個xamlx文件,該文件作爲內容添加並在運行時作爲清單流加載。這使得運行時的發現變得困難。

我不認爲這是使用此模板創建服務的要求,因爲WorkflowServiceHost可以在其​​構造函數中接受一個Activity。

我試圖保持開發一個新的WCF服務的任務,以儘可能精簡流程,在運行時發現,加載和「執行」(即加載和偵聽)。

回答

2

我一直試圖找出自昨天以來一樣,現在我偶然發現一個解決方法。添加新項目時,VS 2010中沒有用於簡單工作流程(xaml)的模板。如果您創建了WCF WF應用程序,則會獲得xamlx。我創建了一個工作流控制檯應用程序而不是,這給了我一個xaml文件,我將其複製到我的工作項目中。完成此操作後,使用WorkflowServiceHost進行託管很簡單。

 string uri = "http://localhost:8008/MyService"; 
     WorkflowServiceHost wsh = new WorkflowServiceHost(new Workflow1(), new Uri(uri)); 
     ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior(); 
     metadataBehavior.HttpGetEnabled = true; 
     wsh.Description.Behaviors.Add(metadataBehavior); 
     wsh.AddServiceEndpoint("IService", new BasicHttpBinding(), uri); 
     wsh.Open(); 
+0

這可能看起來像是一個問題,但在您的示例中是「IService」實際的ServiceContract?我問,因爲我想知道合同是否可以從工作流程定義中推斷出來,或者我不僅需要創建工作流程,還需要定義合同的界面? – Will 2010-07-22 19:37:58

+0

這是客戶端從工作流中可見的接口。你可以任意命名它而不是「IService」,你可以但不一定要在任何.cs文件中聲明。無論從哪種方式,我都看到沒有真正實現這個接口。真正的肉在活動代碼內部,從活動上下文返回給客戶。您應該能夠從活動中的代碼中調用已實施的合同。 – 2010-07-22 19:58:20

2

是的。

This blog post描述瞭如何使用SVC擴展而不是XAMLX,並使用編譯工作流程來完成此操作。這些註釋添加了一些細節,以及如何擺脫SVC文件。您需要使用WorkflowServiceHostFactory作爲工廠來連接。自我託管時,您也可以做類似的事情。

+0

謝謝。檢查出來... – Will 2010-07-22 13:25:30

+3

有幫助,但該死的還有很多沒有說出來。 – Will 2010-07-22 19:31:36

0

其實我只是想通了,「活動」模板中添加新產品的XAML所以沒有必要創建「工作流控制檯應用程序」來獲得一個XAML文件。

+0

工作流在技術上與複合活動相同,這就是爲什麼沒有單獨的新工作流模板的原因。唯一的區別是,如果您按原樣運行它,即工作表,或在工作流上將其重用,從而使其成爲活動。創建XAML工作流非常普遍,按原樣進行測試,然後將其放在XAMLX工作流服務上,以通過WCF公開它。 – Maurice 2010-07-23 06:30:50