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



















