65.9K
CodeProject 正在变化。 阅读更多。
Home

BizTalk 中的端口异常处理

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2007年12月24日

CPOL

3分钟阅读

viewsIcon

34807

BizTalk 中端口的异常处理。

引言

我们为客户开发的接口之一有以下要求。

使用动态发送端口将输出文件发送到目标位置。如果输出文件已存在于目标位置,则使用静态发送端口将文件发送到备份位置。如果文件已存在于备份位置,则捕获异常并使用静态发送端口将文件发送到错误位置。

我们将在以下各节中介绍技术实现,后续各节(可选)将利用上一节的实现。

架构、映射和管道

为了实现此解决方案,我们使用了以下架构、映射和管道:

  1. 架构:EmpData.xsd
  2. 映射:EmpTO Emp.btm
  3. 接收管道1
  4. 发送管道1

在编排视图中,创建编排的一个接收端口和三个发送端口。

此处我们将介绍动态发送端口的创建。

2.2 创建动态端口和异常处理

请参阅以下图像以了解创建动态发送端口的过程。

  1. 在编排视图中创建一个端口类型(例如:PortType_DyanamicSend)。
  2. 在编排视图中添加新端口,并使用配置向导配置该端口。

  3. 从工具栏拖动一个表达式形状,并在表达式形状中输入以下代码:
    {
    DynamicSend(Microsoft.XLANGs.BaseTypes.Address) = @"file://E:TempOUT" + strFilename;
    }

    部署编排后,这将为您创建动态端口。

    (注意:请注意,我们可以从配置节读取传输类型和位置。此处为简化起见,我在编排中硬编码了传输类型和位置。)

为了处理异常,请为在编排视图中创建的每个端口设置“传递通知”属性为“已传输”。

我们需要构造的异常对象类型为Microsoft.XLANGs.BaseTypes.DeliveryFailureException

现在部署包含架构、管道和编排的解决方案。

执行以下步骤:

  1. 在 BTS 管理器中创建一个接收端口(例如:DynamicPortExp.Receive),并设置一个接收位置。
    DynamicPortExp.Receive.File,将传输类型设置为文件,并将文件放置位置设置为e:dataIn
  2. 在 BTS 管理器中创建两个发送端口(例如:DynamicportExp.Send.File,将备份位置设置为e:databackup;以及DynamicPortExp.Send.Error.file,将错误位置设置为e:dataError,传输类型设置为文件)。
  3. 现在,将文件(例如:Emp1.txt)放置在输入位置。在通过编排处理后,它将到达动态发送端口指定的某个位置,例如E:TempOUT
  4. 再次将相同的文件放置在输入位置。由于文件已存在于动态发送端口指定的某个位置,因此将引发“传递失败”异常。我们在编排的catch块中捕获此异常。在事件查看器中记录此异常后,文件将被发送到备份位置。
  5. 再次将相同的文件放置在输入位置。在编排处理后,尝试将文件发送到动态端口指定的某个位置。由于文件已存在于该位置,因此会引发异常,并尝试将文件发送到备份位置,但文件也已存在于备份位置。因此,我们预期编排会将此文件发送到错误位置,但它不会发送到错误位置,我们将在事件查看器中看到以下警告消息,并且编排不会捕获异常。
  6. 为了捕获静态发送端口的异常,诀窍在于将发送端口的重试次数(默认为 -3)和重试间隔(默认为 -5)属性设置为零 (0),如下图所示。

要查找我撰写/发布的更多文章,请访问我的博客:http://biztalk-ssis-ssas.blogspot.com

© . All rights reserved.