WF4.0-工作流服务异常处理2010-11-04 博客园 朱祁林使用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。工作流流程图如下所示: