使用 Ops 适配器

业务流程管理解决方案使用 Ops 适配器处理来自新错误报告功能的错误报告。 该解决方案包括一个示例处理程序,用于处理来自适配器的消息,尽管你可以轻松地编写自己的适配器并在其他解决方案中使用适配器。 有关错误报告功能的信息,请参阅 “使用失败的消息路由”。

注释

尽管解决方案使用适配器进行错误报告,但其使用不限于错误处理。 每当你想要执行特定对象方法以响应消息时,都可以在各种情况下使用适配器。

Ops 适配器如何处理错误报告

解决方案中使用错误报告的端口最终会将错误消息发送到 BizTalkErrors-SP 端口。 端口上的筛选器测试是否存在 ErrorReport.ErrorType 上下文属性。 只有错误消息具有此上下文属性。

BizTalkErrors-SP 发送端口通过管道运行错误消息,该管道使用 XML 汇编程序组件将消息放入信封中。 然后,该消息将转到 Ops 适配器。

由 ErrorEnvelope 架构定义的信封被标记为接受任何类型的消息。 但是,“any”表示 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 方法。

配置适配器

可以像配置任何其他适配器一样配置适配器。 下表描述了适配器的配置属性:

显示名称 DESCRIPTION
.NET 程序集强名称 程序集的完全限定名称。
OpsAIC 类名称 实现 IOpsAIC 接口的程序集中的类的名称。
初始化数据 作为参数传递给类的 Initialize 方法的字符串。

请注意,适配器需要程序集的完全限定名称。 完全限定的名称是在将程序集添加到 GAC 时提供给程序集的名称。 完全限定名称是一个字符串,其中包含程序集的名称、版本、区域性和公钥令牌。 可以使用全局程序集缓存工具 gacutil.exe查看程序集的完全限定名称。

有关完全限定程序集名称的详细信息,请参阅 .NET Framework 开发人员指南中的“程序集名称”。 有关 gacutil.exe的详细信息,请参阅 .NET Framework 开发人员指南中的“全局程序集缓存工具(Gacutil.exe)”。

必须向命名空间提供类名。 例如,如果类是 OperationsHandler 命名空间中的 OpsHandler,则将类名称命名为 OperationsHandler.OpsHandler

另请参阅

Ops 适配器