如何在业务流程中处理类型化错误协定
本主题介绍从业务流程内部使用 WCF 服务时应如何处理类型化错误协定。 若要处理业务流程中的类型化错误异常,使用的 WCF 服务必须将 FaultContractAttribute 应用于服务操作;因此,可以使用 FaultException<T> 引发错误,其中 T 可以是 WCF 服务中的任何有效数据协定或可序列化类型。
过程
处理业务流程中的类型化故障协定
在 Microsoft Visual Studio BizTalk 项目中,在 解决方案资源管理器 中,右键单击项目,单击“添加”,然后单击“添加生成的项”。
在 “添加生成的项 - <项目名称> ”对话框中的“ 模板 ”部分,选择“ 使用 WCF 服务”,然后单击“ 添加”。
在 “欢迎使用 BizTalk WCF 服务使用向导” 页上,单击“ 下一步”。
在 “元数据源 ”页上,选择“ (MEX) 终结点的元数据交换”,然后单击“ 下一步”。
在 “元数据终结点 ”页上,指定正在运行的服务的 URL,该服务提供通过 WS-Metadata Exchange 或 Http-Get 下载的元数据,例如, http://localhost:8005. 若要从 URL 获取元数据文档,请单击“ 获取”。 如果正在运行的服务需要具有基本身份验证方案的用户凭据,请单击“ 编辑 ”打开 BizTalk WCF 服务使用向导 对话框,可在其中提供访问正在运行的服务时要使用的用户名和密码。 单击“下一步”。
在 “导入 WCF 服务元数据摘要 ”页上,查看设置。 可以单击“ 返回 ”进行任何更改。 然后单击“ 导入 ”,创建用于使用 WCF 服务的 BizTalk 项目和类型。
在 “完成 BizTalk WCF 服务使用向导” 页上,单击“ 完成”。
假设您正在使用的 WCF 服务引发以下错误异常:
throw new FaultException<MyOperationException>(divideException);
发送端口上的错误操作需要 MyOperationException 类型的消息,但 WCF 响应消息包含整个错误正文。 因此,需要通过在传输属性对话框中配置入站 BizTalk 消息正文选项,从消息中提取 MyOperationException 部分。 例如,
选择 “路径” - 按正文路径定位的内容。
设置正文路径表达式,如下所示:
/*[local-name()='Fault']/*[local-name()='Detail']/* | /*[local-name()='DivideResponse']
从“节点编码”下拉列表中选择“Xml”。
在业务流程中,您需要添加一个作用域和两个异常处理程序。 一个异常处理程序适用于 Fault 操作,类似于前面示例中所示的 MyOperationException ;另一个异常处理程序用于捕获泛型 SOAPExceptions。
另请参阅
如何从发布为 WCF Services 的业务流程中引发错误异常
如何利用 BizTalk WCF 服务使用向导来使用 WCF 服务