本主题介绍如何在业务流程中使用 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部分。 例如,
选择 路径 -- 按正文路径定位的内容。
将 Body 路径表达式设置为如下:
/*[local-name()='Fault']/*[local-name()='Detail']/* | /*[local-name()='DivideResponse']从“节点编码”下拉列表中选择 Xml。
在编排中,需要添加一个范围和两个异常处理程序。 一个异常处理程序适用于故障作,类似于前面示例中所示的 MyOperationException ;另一个异常处理程序用于捕获泛型 SOAPExceptions。