WF4.0:工作流程服務異常處理

來源:互聯網
上載者:User

     使用ReceiveAndSendReply活動模板和WorkflowServiceHost可以很容易地建立一個工作流程服務。它可以像一個普通WCF服務一樣與其他應用程式進行通訊。大部分的配置也相當簡單。選擇Receive活動並加以配置,和SendReply活動類似。大部分的工作用在設定OperationContract或者ServiceContract上面。

    出現了錯誤該怎麼辦

    事實上是沒有任何屬性可以用來指定返回的錯誤。

    拋出FaultException

    當Workflow服務拋出一個FaultException的時候,非常期待它被及時處理。異常能被當作SOAP錯誤被發送到用戶端,假設用戶端也是.NET,可以將它作為一個FaultException進行捕獲。

    拋出FaultException<T>

    通常,當您想給異常添加一些額外的資訊,您就需要建立一個額外的類,並用FaultContract屬性聲明服務契約,來指定返回的錯誤。在用戶端需要添加服務中繼資料,做一個加入服務參考來建立所需的類型。但是,對於工作流程服務,沒有用於添加屬性的服務契約類 。就沒有屬性給我們使用來實現這些目的。那麼,我們如何指定與工作流程服務互動的異常契約呢?

    解決方案

    竅門是給工作流程上相關的Receive活動添加第二個SendReply。第二個SendReply活動返回錯誤契約。添加第二個SendReply活動很簡單,只需按右鍵Receive活動,並選擇建立SendReply活動就行了。下一步建立一個變數來儲存的錯誤資訊。

我使用的FaultDetail很簡單,它將所有收到的資料發送回用戶端。

 1  using System.Runtime.Serialization; 
 2  namespace ServicesAndFaults{    
 3  [DataContract]    
 4  public class FaultDetail    
 5  {        
 6  [DataMember]        
 7  public int Data { get; set; }    
 8  }
 9  }
10 

對於第二個SendReply活動,建立和拋出一個FaultException。工作流程流程圖如下所示:

下面的運算式用來初始化錯誤異常

下面的SendReply活動是返回錯誤,配置如下的:

有了這個設定,可以在用戶端添加Service Reference和使用下面的代碼得到預期的結果

 1 static void Main(string[] args)
 2 {    
 3 var proxy = new ServiceClient();     
 4 try    
 5 {        
 6 Console.WriteLine(proxy.GetData(42));    
 7 }    
 8 catch (FaultException<FaultDetail> ex)    
 9 {        
10 Console.WriteLine("FaultException<FaultDetail> with {0}", ex.Detail.Data);    
11 }    
12 catch (FaultException ex)    
13 {        
14 Console.WriteLine(ex);    
15 }     
16 Console.ReadLine();
17 }

 

服務控制台應用程式中工作流程輸出如下。請注意,最後一條訊息,“the workflow finishing”沒有出現。不要奇怪,我們拋出一個異常其實沒有被捕獲,它終止了工作流程。

但想讓工作流程繼續跑下去!

    有時上面的處理方式很好,但有時候並不是。例如你在一個訂單上工作了1個月了,你會僅僅因為一個異常而終止所有的工作嗎?當然不會。

    第二種方法返回給調用用戶端的個錯誤,只不過是SendReply活動中自訂的FaultException或FaultException <T>。用戶端不會知道其中的差別,但工作流程還會繼續運行。因此,我需要做的是移出Throw 活動,讓第二個SendReply活動實現它的工作。

    這一次,服務控制台應用程式輸出如下:

    原文:Workflow 4 and soap faults

    代碼:/Files/zhuqil/8424.ServicesAndFaults_05F3442D.zip

    ps: 歡迎加入WF4.0技術討論群51262864

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.