2011-03-15 75 views
0

我試圖建立一個請求提交/批准/完成場景的模型。我正在使用WorkflowServiceHost在控制檯應用程序中使用作爲服務託管的流程圖工作流程。該工作流具有對IIS中託管的WCF服務的服務引用,該第二個服務與應用程序數據庫進行交互。我有一個aspnet前端,提供對託管工作流服務的服務引用,並從代理客戶端調用其方法。使用ASPNET的工作流4:併發性和狀態檢查

工作流正在使用我使用提供的腳本創建的持久性數據庫。

這種情況是服務的請求是由用戶做出的。該請求必須由特定人員批准一次(我在一個分支中使用延遲選擇來提醒該人員,如果沒有決定到達,另一個分支是接收決定)。對於某些服務,請求必須獲得批准人中的任何一個可以完成的第二次批准。一旦批准完成,請求會發送給另一個人完成。

我有工作,但3個問題:

  1. 在ASPNET主頁我有一個鏈接請求到頁面完全作爲代理適當和調用方法後,他們重定向回清單批准/但因爲它都是異步的,我不得不手動刷新主頁以查看更改的列表。我堅持強制頁面每隔x秒刷新一次以解決這個問題,還是有辦法讓它同步/檢查工作流狀態/等待消息回來嗎?只是按下按鈕並不知道該操作是否成功。
  2. 有沒有辦法阻止某人在池中的其他人批准之後立即批准請求?此時第二個人沒有碰到按鈕(這很好)。在工作流持久性數據庫中,我可以看到阻塞書籤是下一個活動(大概由首先到達那裏的人設置),因此看起來好像第二次接收不會發生。我有WCF數據服務中的併發檢查代碼,但這永遠不會觸發,因爲沒有嘗試更新數據庫。我希望能夠警告第二個人,其他用戶先到達那裏。
  3. 我在網頁應用程序中的主頁列表是通過查詢應用程序數據庫構建的,但可以通過查詢工作流來查找每個項目的狀態,傳遞項目的ID(我使用id作爲相關句柄) ?這樣做是正常的還是人們通常只是查詢應用程序數據庫?

回答

0
  1. 我想你可以創建一個Ajax調用如果發生任何狀態變化,將檢查,只刷新頁面時,即是如此。
  2. 如果您爲不再有效的操作發送WCF請求,則應該收到錯誤消息,除非您使用單向消息傳遞,因爲沒有消息可以將錯誤發送回去。請注意,由於WF4中的錯誤,消息可能會在60秒後超時。沒有真正的方法可以避免該問題,因爲您正在檢查工作流狀態爲持續狀態,並讓用戶根據該狀態執行操作。即使在查詢狀態時,工作流可能已恢復但尚未保存。
  3. 可以工作,但我通常會查詢工作流實例存儲,因爲它最接近實際工作流程狀態。
+0

謝謝。 1)我的確在考慮Ajax,但不知道如何去做,會看看一些教程
2)我嘗試將其中一個接收轉換爲ReceiveAndSendReply(接收都在Pick分支的Trigger部分中)但我剛剛得到了你所描述的暫停。這是一個問題,因爲併發很重要。3)你是怎麼做到的?我可以看到阻止書籤,但我看不到項目標識 - 是否需要解密某些內容? – Nix 2011-03-16 07:44:54

+0

您可以按原樣查看阻止書籤,如果您使用屬性提升功能,則可以從工作流程中提取其他變量並從數據庫中檢索它們。 – Maurice 2011-03-16 09:09:11

+0

我在asp端做了一些等待消息回來的工作。但是我曾經能夠一次提交2個接收,所以我的併發異常從wcf發起。我試圖在工作流中實現Try Catch,但工作流似乎陷入了故障狀態,即使它捕捉到異常。我開始嘗試拋出一個FaultException定義爲FaultContract,但出現錯誤:沒有簽名消息部分被指定給消息......我被卡住了。我是否必須使用FaultContract,以及如何停止工作流程錯誤,並只是將異常或消息傳遞給asp? – Nix 2011-03-16 17:48:48