如何在业务流程中处理类型化错误协定

本主题介绍从业务流程内部使用 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 部分。 例如,

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

    • 设置正文路径表达式,如下所示:

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

  9. 在业务流程中,您需要添加一个作用域和两个异常处理程序。 一个异常处理程序适用于 Fault 操作,类似于前面示例中所示的 MyOperationException ;另一个异常处理程序用于捕获泛型 SOAPExceptions

另请参阅

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