調(diào)用ASP.NET工作流:承載及限制
Windows Workflow Foundation 框架支持 Web 服務(wù)互操作性。 該框架能夠?qū)⒐ぷ髁髯鳛?Web 服務(wù)公開(kāi)給 ASP.NET 客戶(hù)端和其他工作流。 Windows Workflow Foundation 支持將工作流作為 ASP.NET Web 服務(wù)發(fā)布到在 Internet 信息服務(wù) (IIS) 6.0 上運(yùn)行 ASP.NET 的 Web 服務(wù)器或服務(wù)器場(chǎng)。 因?yàn)?Windows Workflow Foundation Web 服務(wù)支持以 ASP.NET 2.0 為基礎(chǔ),所以它繼承了標(biāo)準(zhǔn) ASP.NET Web 服務(wù)的大部分功能。
Windows Workflow Foundation 基本活動(dòng)庫(kù)包含 WebServiceInputActivity 和 WebServiceOutputActivity 活動(dòng),這些活動(dòng)允許將工作流用作 Web 服務(wù)終結(jié)點(diǎn)。 有關(guān)使用這些 Web 服務(wù)活動(dòng)的信息,請(qǐng)參見(jiàn) 使用 WebServiceInputActivity 活動(dòng)和 使用 WebServiceOutputActivity 活動(dòng)。
ASP.NET工作流 Web 承載
用于工作流 Web 承載的主要類(lèi)包括:
WorkflowWebHostingModule
ManualWorkflowSchedulerService
WorkflowWebHostingModule
WorkflowWebHostingModule 類(lèi)是默認(rèn)的路由機(jī)制,用于通過(guò)使用 ASP.NET Cookie 將 Web 服務(wù)請(qǐng)求路由到相應(yīng)的工作流。 當(dāng)然,發(fā)出這些請(qǐng)求的客戶(hù)端必須支持 Cookie。
雖然 Windows Workflow Foundation 提供此默認(rèn)路由機(jī)制,但您可以實(shí)現(xiàn)自己的自定義路由機(jī)制。 例如,當(dāng)不能在客戶(hù)端中啟用 Cookie 時(shí),可以配置客戶(hù)端創(chuàng)建具有特定 Id 的工作流實(shí)例,并在每個(gè) Web 服務(wù)請(qǐng)求中傳遞該 Id。 可以使用 SOAP 或 HTTP 處理程序配置請(qǐng)求管線(xiàn)以截獲調(diào)用,從標(biāo)頭信息中檢索工作流實(shí)例 Id,然后將 HttpContext.Current.Items.Add("__WorkflowInstanceId__", workflowInstanceId) 設(shè)置為傳入的 Id。
ManualWorkflowSchedulerService
ManualWorkflowSchedulerService 類(lèi)是 WorkflowSchedulerService 的一個(gè)專(zhuān)用實(shí)現(xiàn),它通過(guò)重用一個(gè)線(xiàn)程(該線(xiàn)程發(fā)出 ASP.NET Web 請(qǐng)求以運(yùn)行工作流實(shí)例),對(duì) ASP.NET 進(jìn)程中生成的線(xiàn)程數(shù)進(jìn)行控制。 這確保了工作流運(yùn)行時(shí)中的活動(dòng)線(xiàn)程數(shù)在任意時(shí)候都等于 ASP.NET 進(jìn)程中的活動(dòng) Web 請(qǐng)求數(shù)。
公開(kāi)為 Web 服務(wù)的ASP.NET工作流的限制
實(shí)例路由在 ASP.NET 會(huì)話(huà)的基礎(chǔ)上工作。 作為 Web 服務(wù)的使用者,它需要支持 ASP.NET Cookie。
即使可以將“接收請(qǐng)求-發(fā)送響應(yīng)”建模為工作流中的異步操作,ASP.NET 的常規(guī)限制仍適用于 Web 服務(wù)的使用者,即實(shí)例不能在未處理的請(qǐng)求-響應(yīng)操作之間遷移進(jìn)程。
啟用 Cookie 以調(diào)用ASP.NET工作流 Web 服務(wù)
工作流 Web 服務(wù)使用 Cookie 跟蹤狀態(tài)。 如果將工作流發(fā)布為 Web 服務(wù),則必須在調(diào)用它的客戶(hù)端代碼中啟用 Cookie。 例如:
CalculatorWorkflow_WebService service = new CalculatorWorkflow_WebService();
service.CookieContainer = new System.Net.CookieContainer();
這使您可以對(duì)“service”對(duì)象進(jìn)行方法調(diào)用。
【編輯推薦】