使用 Ops 适配器
业务流程管理解决方案使用 Ops 适配器处理由新的错误报告功能生成的错误报告。 该解决方案包含一个示例处理程序,用于处理来自适配器的消息,但是,您可以轻松地编写自己的处理程序,从而将适配器用于其他解决方案中。 有关错误报告功能的信息,请参阅 使用失败的消息路由。
注意
虽然该解决方案将适配器用于错误报告,但其用途并不限于错误处理。 要执行特定对象方法以响应消息时,可以将适配器用于各种情况。
Ops 适配器如何处理错误报告
解决方案中使用错误报告的端口最终会将错误消息发送到 BizTalkErrors-SP 端口。 端口上的筛选器测试 是否存在 ErrorReport.ErrorType 上下文属性。 只有错误报告消息具有该上下文属性。
BizTalkErrors-SP 发送端口通过管道运行错误消息,该管道使用 XML 汇编程序组件将消息放入信封中。 消息随后进入 Ops 适配器。
由 ErrorEnvelope 架构定义的信封被标记为接受任何类型的消息。 但是,“任何”是指在 BizTalk 组中定义的任何消息类型。 如果解决方案接收到未知类型的消息,则会生成挂起消息。 此类消息将产生错误,并会路由到 BizTalkErrors-SP 端口。 该消息还将在管道的 XML 组装器组件中生成错误,因为它不是已知的消息类型。 该管道错误将挂起该消息。
注意
若要处理由于未知消息类型而导致的路由错误,必须编写自定义管道组件,并在 BizTalkErrors-SP 端口的自定义管道中使用该组件。 该自定义组件将替换 XML 组装器组件。 自定义组件必须将 ErrorReport 属性放在信封标头中,并将消息添加到信封的正文中。
Ops 适配器是事务性的单向发送适配器。 适配器处理消息时,如有必要,它会首先加载指定的程序集。 适配器在内存中缓存程序集,以避免在每次调用时加载程序集的系统开销。 然后,它会创建指定类的实例,然后使用反射获取实现 IOpsAIC 接口的程序集中的 对象。 如果所有这些操作都成功,适配器将调用 Initialize 方法,然后调用 Execute 方法,并传递错误报告消息。
如果调用 Execute 时出错,适配器将重新提交消息。 如果指定的类未实现 IOpsAIC 接口,或者找不到类或程序集,适配器将挂起该消息。
提示
因为适配器使用反射,所以包含类的程序集必须在全局程序集缓存 (GAC) 中。
IOpsAIC 接口
适配器需要实现 IOpsAIC 接口的对象。 该接口如下所示:
interface IOpsAIC
{
void Initialize(string config);
void Execute(byte[] message);
}
适配器将原始消息作为字节数组传递到 Execute 方法。
配置适配器
配置该适配器的方法和配置其他任何适配器的方法一样。 下表介绍了该适配器的配置属性:
显示名称 | 说明 |
---|---|
.NET 程序集强名称 | 程序集的完全限定名。 |
OpsAIC 类名 | 实现 IOpsAIC 接口的程序集中的类的名称。 |
初始化数据 | 作为参数传递给 类的 Initialize 方法的字符串。 |
请注意,适配器需要程序集的完全限定名。 完全限定名是将程序集添加到 GAC 中时为其提供的名称。 完全限定名是一个包含程序集的名称、版本、区域性和公钥标记的字符串。 可以使用全局程序集缓存工具 gacutil.exe 查看程序集的完全限定名。
有关完全限定的程序集名称的详细信息,请参阅 .NET Framework 开发人员指南中的“程序集名称”。 有关 gacutil.exe 的详细信息,请参阅 .NET Framework 开发人员指南中的“全局程序集缓存工具 (Gacutil.exe)”。
必须为命名空间提供类名。 例如,如果类是 OperationsHandler 命名空间中的 OpsHandler ,则需将类名称命名为 OperationsHandler.OpsHandler。