2012-07-01 21 views
1

我正在創建WCF WorkflowService並且客戶端正在對該服務進行異步調用。工作流程運行時間很長,一旦客戶端斷開連接(即關閉請求的應用程序),工作流程將繼續並不會停止。這個怎麼用?一旦cleint斷開連接,服務實例是否被破壞,工作流應該停止?爲什麼WCF工作流服務表現爲單向

爲什麼默認情況下表現爲「失火而忘記」,即單向?

編輯:嗯,我想,一旦客戶端斷開連接,服務實例被破壞,工作流中止

+0

您期望/喜歡什麼行爲? – abatishchev

+0

嗯,我想,一旦客戶端斷開連接,服務實例被銷燬,工作流程終止 – Bhaskar

+0

這個問題只問*爲什麼*。你會滿意於一個嚴格的解釋性答案嗎? – Jon

回答

2

工作流引擎車型長時間運行的異步進程。這樣的過程可以跨越第二個,幾個小時,幾周甚至幾年,並且可能涉及一個或多個參與者。因此,要求保持連接暢通是不合理和不可取的。

Windows工作流服務會將其狀態保存到某個數據存儲區(通常是數據庫),以便如果該工作流在指定的時間內沒有任何事情發生,則可將其保存到數據庫並從內存中卸載。將來,當有人調用某個與該工作流實例相關的WCF操作時,它將從數據庫中恢復,並繼續執行,就像它始終加載到內存中一樣。這使得許多工作流實例可以存在於任何時間點,其中只有一小部分實際佔用計算機資源。

耐用性也是工作流服務的一個重要特性。如果有一個工作流程已經持續了很長時間,那麼最後一件事就是丟失所有的狀態和數據,如果可能的話,你需要重新開始。這就是爲什麼工作流的狀態信息不依賴於網絡連接那樣脆弱的原因。

+0

所以,基本上我想要的是,客戶端調用WCF調用工作流,然後退出應用程序。被調用的工作流將以異步方式啓動和運行,並在其自己的時間內完成。我不需要爲這樣的事情引入消息隊列? – Bhaskar

+0

@Bhaskar:「跑步」是什麼意思?通常情況下,工作流大部分時間都在等待WCF調用,並且在調用進來或計時器過去時做一些工作等。您能描述一下WF想實現的目標嗎?一個簡單的非WF OneWay WCF呼叫就足夠了嗎? –

+0

我只有一個調用,用戶調用ReceiveRequest方法,並啓動工作流。之後,工作流程不需要任何用戶干預。它執行一系列耗時的步驟(例如巨大的文件複製),可能需要數小時。同時用戶需要退出應用程序並執行其他操作。這有道理嗎? – Bhaskar