如何处理业务流程中的类型化故障协定

本主题介绍如何在业务流程中使用 WCF 服务时处理类型化故障协定。 若要处理业务流程中的类型化故障异常,您使用的 WCF 服务必须将 FaultContractAttribute 应用于服务操作;因此,可以通过 FaultException<T> 抛出故障,其中 T 可以是 WCF 服务中的任何有效数据协定或可序列化类型。

过程

在业务流程中处理类型化故障协定

  1. 在 Microsoft Visual Studio BizTalk 项目中,在解决方案资源管理器中,右键单击项目,单击“ 添加”,然后单击“ 添加生成的项”。

  2. “添加生成的项 - <项目名称> ”对话框中的 “模板 ”部分中,选择“ 使用 WCF 服务”,然后单击“ 添加”。

  3. “欢迎使用 BizTalk WCF 服务使用向导” 页上,单击“ 下一步”。

  4. “元数据源 ”页上,选择 “元数据交换”(MEX)终结点,然后单击“ 下一步”。

  5. “元数据终结点 ”页上,指定正在运行的服务的 URL,该服务提供通过 WS-Metadata Exchange 或 Http-Get 下载的元数据,例如, http://localhost:8005. 若要从 URL 获取元数据文档,请单击“ 获取”。 如果正在运行的服务需要使用基本身份验证方案的用户凭据,请单击 “编辑 ”以打开 BizTalk WCF 服务使用向导 对话框,可在其中提供访问正在运行的服务时要使用的用户名和密码。 单击 “下一步”

  6. “导入 WCF 服务元数据摘要 ”页上,查看设置。 可以单击“ 返回 ”进行任何更改。 然后单击“ 导入 ”以创建用于使用 WCF 服务的 BizTalk 项目和类型。

  7. “完成 BizTalk WCF 服务使用向导” 页上,单击“ 完成”。

  8. 假设您使用的 WCF 服务抛出以下故障异常:

    throw new FaultException<MyOperationException>(divideException);  
    

    发送端口上的故障操作期望接收 MyOperationException 类型的消息,但返回的 WCF 响应消息包含整个故障消息的正文。 因此,需要通过在传输属性对话框中配置入站 BizTalk 消息正文选项,从消息中提取MyOperationException部分。 例如,

    • 选择 路径 -- 按正文路径定位的内容

    • 将 Body 路径表达式设置为如下:

      /*[local-name()='Fault']/*[local-name()='Detail']/* | /*[local-name()='DivideResponse']  
      
    • “节点编码”下拉列表中选择 Xml

  9. 在编排中,需要添加一个范围和两个异常处理程序。 一个异常处理程序适用于故障作,类似于前面示例中所示的 MyOperationException ;另一个异常处理程序用于捕获泛型 SOAPExceptions

另请参阅

如何从作为 WCF 服务发布的业务流程引发错误异常
如何使用 BizTalk WCF 服务调用向导来调用 WCF 服务