2010-05-18 57 views
2

好的,所以我可能會接近這個錯誤,但本質上我試圖在4.0中使用新的WF服務來建立一個Windows服務,託管一個WF服務。目前我已經構建了客戶端(包含一個簡單的Activity XAML)和服務(在XAMLX文件中實現了WF服務)項目。託管工作流與WorkflowServiceHost

我已經嘗試過簡單的「hello worlds」for each one。客戶端託管在WorkflowApplication中,我最初將該服務設置爲默認的WF服務項目模板。在那裏似乎都很好。

由於我想在沒有IIS的情況下託管一項服務,所以我的下一次嘗試是將我的服務託管在WorkflowServiceHost中。這樣做,我可以使用XamlServices.Load()並將它返回的對象連同端點的URI一起傳遞給WorkflowServiceHost構造函數。我很擔心,因爲類中沒有Run()成員方法。我假設Open()方法會將服務主機對象作爲服務來打開,並且它會啓動工作流的實例,但沒有任何指示。

起初,我設置了服務工作流程,以便在開始時寫入文本文件,但沒有發生任何事情。我試圖用斷點進行調試,但由於它在運行時加載了XAMLX文件,因此VS不允許我調試WF。所以我嘗試改變客戶端項目以使用WorkflowServiceHost而不是WorkflowApplication。我使用了相同的工作流程來測試hello世界風格的工作流程,這一次沒有輸出到控制檯,並且WorkflowApplication與之前的成功。

下面是我用客戶端在控制檯項目中託管工作流服務的基礎知識。如果有人想看到工作流程的XAML,請告訴我,我會更新這個問題。這裏是Main()的託管代碼。

const String clientAddress = "http://localhost:9998/Client";  
WorkflowServiceHost wfHost = new WorkflowServiceHost(new ClientWf(), new Uri(clientAddress)); 
wfHost.Open(); 

while(Console.ReadKey().KeyChar.ToString().ToUpper() != "X") { } 

wfHost.Close(); 

回答

2

什麼我發現是,因爲你不能直接啓動由WorkflowServiceHost對象包裝的WF實例,它是一個有點痛,以通過簡單的方法調用,比如你可以運行它,幾乎是不可能的用WorkflowApplication完成。有一個「竅門」讓WF開火,但需要一些我在這個時候沒有給予時間的黑客攻擊。 MSDN有一個模糊的參考,你可以在這種情況下做什麼here,在託管非服務工作流程

這是我的解決方案:使用WorkflowServiceHost和WorkflowApplication。你爲什麼問?那是因爲我試圖用一個小小的包裝來做很多事情。我還將此作爲我的工作的自定義服務模型,最好將業務邏輯(WorkflowApplication)與所有通信實現(WorkflowServiceHost)分開。這種服務正好適用於這種方式,因爲當然現在是我的基礎通信。工作流程以接收活動開始,WorkflowSericeHosts在關聯工作流程的根目錄查找某種類型的消息傳遞活動,以啓動實例。

現在我是一個快樂的露營者。我的業務邏輯完成了預期的工作,並且工作流服務正在充實。更好的是,我有一個模型,可以動態地放下業務邏輯以動態設置和部署自定義數據處理/運行服務。現在只需完善電話回覆功能即可實現遠程「儀表板」的日期,這就是我正在接下來的工作。