2010-03-23 68 views
2

我有一堆使用Web服務和交談,我想添加一些錯誤處理數據庫的工作流基礎4.0 RC碼活動。工作流4.0的代碼活動調用其他activites(持續,延遲等)

我真的希望能夠嘗試調用我的Web服務/ db,捕獲任何錯誤,如通信故障,然後在1小時內(在記錄異常之後)重試相同的操作。

有沒有辦法做這樣的事情?

protected override void Execute(CodeActivityContext context) { 

    Persist(); // I would like to invoke the persist activity like this 

    if (!AttemptServiceCall()) { 

     // I would like to invoke a delay activity like this 
     Delay(new TimeSpan(0, 30, 0)); // wait 30 mins before trying again 
     Execute(context); // call this activity again 
    } 
} 

private bool AttemptServiceCall() { 

    bool serviceCallSuccessful = true; 

    try { 
     myService.InvokeSomeMethod(); 
    } 
    catch (CommunicationException ex) { 
     myEventLogger.Log(ex); 
     serviceCallSuccessful = false; 
    } 

    return serviceCallSuccessful; 
} 

回答

2

是的,一旦你知道WF4的活動如何工作,這並不難。

我可以輸入一個長長的故事,但是由於Richard Blewett已經對一個Retry活動進行了博客,這個活動確實重試了您描述的重試行爲,我只是想鏈接到該博客文章here。唯一缺少的是堅持,但應該很容易添加。

只需創建您的AttemptServiceCall活動並將其添加爲正文。鑑於它聽起來像一個潛在的長時間運行的動作,我建議使用AsyncCodeActivity作爲基類。

+0

謝謝你的迅速回答莫里斯 - 你是工作流程的王! – Lygpt 2010-03-23 16:26:01