CBR(BizTalk Server 示例)

CBR 示例演示如何使用 ExplorerOM 管理对象为 BizTalk 消息的基于内容的路由添加和配置新的发送端口。

必备条件

  • 此示例要求通过运行位于 <Samples Path>\Messaging\CBRSample 目录中 setup.bat 来部署 CBRSample。

  • 必须具有BizTalk Server管理权限才能使用此示例中的管理对象。

  • Windows PowerShell 脚本示例需要 Windows PowerShell 执行策略才能允许脚本执行。 有关详细信息,请参阅 about_Execution_Policies

本示例的用途

此示例演示如何使用 Microsoft.BizTalk.ExplorerOM 命名空间中的管理对象向 CBRApplication 示例添加两个新端口。 这些新端口是 CBRApplication 的示例端口。 这些端口配置为使用 HTTP 适配器将消息路由到假设的 HTTP Web 服务地址。 本示例演示如何使用 ExplorerOM 对象完成以下操作:

  • 使用 Application 类的 AddNewSendPort 方法将名为 SendportUSOrders 的新发送端口添加到 CBRApplication。 此端口配置为将用于传输的 HTTP 适配器与假设的 Web 地址一起使用。

  • 将筛选器添加到订阅美国国家/地区代码值为 100 的 CBRApplication 中的消息的 SendportUSOrders。

  • 添加 CBRApplication 映射,将基于美国的消息转换为 SendportUSOrders 的出站映射。

  • 将名为 SendportCANOrders 的新发送端口添加到 CBRApplication,并将其配置为将用于传输的 HTTP 适配器与假设的 Web 地址一起使用。

  • 将筛选器添加到订阅加拿大国家/地区代码值为 200 的 CBRApplication 中的消息的 SendportCANOrders。

  • 添加 CBRApplication 映射,将基于加拿大的消息转换为 SendportCANOrders 的出站映射。

本示例的所在位置

本示例位于以下 SDK 位置中:

<示例路径>\管理员\ExplorerOM\CBR

下表显示了本示例中的文件及其用途说明:

文件 说明
ContentBasedRouting.cs 此示例中演示的操作的 Visual C# 源文件。
CBR.sln、CBR.csproj、CBR.suo 示例的解决方案文件和项目文件。

生成并运行本示例

生成示例

  1. 确保您已经完成了构建、部署和配置 CBRSample 的步骤。 这些步骤在 CBRSample (BizTalk Server Sample) 中提供。

  2. 在 Visual Studio 中,打开解决方案文件 CBR.sln。

  3. “生成” 菜单上,单击 “生成解决方案”

运行本示例的步骤

  1. 打开BizTalk Server管理控制台并导航到 CBRApplication 节点。

  2. 展开 CBRApplication 节点,验证 发送端口 节点当前是否只有两个端口列为 CBRUSSendPort 和 CBRCANSendPort。

  3. 打开命令窗口并导航到以下文件夹:

    <示例路径>\管理员\ExplorerOM\CBR\bin\Debug

  4. 运行文件 CBR.exe。

  5. 在BizTalk Server管理控制台中按 F5 刷新“发送端口”节点下的视图。 现在,您应该能看到此示例添加到 CBRApplication 的两个新端口。 这两个端口名为 SendportUSOrders 和 SendportCANOrders。

Windows Powershell 脚本示例

以下 Windows PowerShell 脚本可用于演示 ExplorerOM 类的相同功能。 但是,由于 SendPort.OutboundTranforms 集合的 Add 方法在 ExplorerOM 程序集中标记为 Internal,因此无法直接从 Windows PowerShell调用它。 此 Windows PowerShell 脚本演示了如何使用 Windows PowerShell 中的 BizTalk WMI 提供程序将出站转换映射添加到新端口。

Function WMI_AddOutboundTransformToPort($transform,$strPortName)
{
    Write-Host "WMI Processing Transform...`r`nPortName `:"$strPortName
    Write-Host "Transform `:"$transform.AssemblyQualifiedName

    $WMIsendport = get-wmiobject MSBTS_SendPort -filter "Name=`"$strPortName`"" -namespace root\microsoftbiztalkserver
    $WMIsendport.OutboundTransforms = $transform.AssemblyQualifiedName
    [Void] $WMIsendport.Put()
    [Void] $WMIsendport.Start()
}

#===================#
#=== Main Script ===#
#===================#

#=== Make sure the ExplorerOM assembly is loaded ===#

[void] [System.reflection.Assembly]::LoadWithPartialName("Microsoft.BizTalk.ExplorerOM")

#=== Connect to the BizTalk Management database ===#

$Catalog = New-Object Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer
$Catalog.ConnectionString = "SERVER=.;DATABASE=BizTalkMgmtDb;Integrated Security=SSPI"

$CBRApp = $Catalog.Applications["CBRApplication"]

if ($CBRApp -eq $null)
{
    Write-Host "`r`nFailed to find `"CBRApplication`" deployed on this BizTalk server."
    Write-Host "You must deploy the SDK\Samples\Messaging\CBRSample in order to test this script.`r`n"
}
else
{
    #=== Register a trap handler for any exceptions ===#
    $ErrorActionPreference="silentlycontinue"
    trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }

    #===================================#
    #=== Create the U.S. Orders Port ===#
    #===================================#

    $USPort = $CBRApp.AddNewSendPort($false,$false)
    $USPort.Name = "SendportUSOrders"
    $USPort.PrimaryTransport.TransportType = $Catalog.ProtocolTypes["HTTP"]
    $USPort.PrimaryTransport.Address = "http://process_orders_US.asp"
    $USPort.SendPipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.XMLTransmit"]

    #=== add the filter to subscribe to messages with U.S country code 100 ===#

    $USPort.Filter = "<Filter><Group>" +
                     "<Statement Property='BTS.ReceivePortName' Operator='0' Value='ReceivePortPO'/>" +
                     "<Statement Property='CBRSample.CountryCode' Operator='0' Value='100'/>" +
                     "</Group></Filter>"

    Write-Host("`r`nAdding " + $UsPort.Name + " to catalog ...")
    $Catalog.SaveChanges()

    #=========================================================================================#
    #=== SendPortTranformCollection::Add is marked internal in ExplorerOM for some reason. ===#
    #=== Use WMI to set this as a workaround through PowerShell.                           ===#
    #=========================================================================================#

    WMI_AddOutboundTransformToPort $Catalog.Transforms["CBRSample.CBRInput2USMap"] $USport.Name

    #=====================================#
    #=== Create the Canada Orders Port ===#
    #=====================================#

    $CanadaPort = $CBRApp.AddNewSendPort($false,$false)
    $CanadaPort.Name = "SendportCANOrders"
    $CanadaPort.PrimaryTransport.TransportType = $Catalog.ProtocolTypes["HTTP"]
    $CanadaPort.PrimaryTransport.Address = "http://process_orders_CAN.asp"
    $CanadaPort.SendPipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.XMLTransmit"]

    #=== add the filter to subscribe to messages with U.S country code 100 ===#

    $CanadaPort.Filter = "<Filter><Group>" +
                     "<Statement Property='BTS.ReceivePortName' Operator='0' Value='ReceivePortPO'/>" +
                     "<Statement Property='CBRSample.CountryCode' Operator='0' Value='200'/>" +
                     "</Group></Filter>"

    Write-Host("`r`nAdding " + $UsPort.Name + " to catalog ...")
    $Catalog.SaveChanges()

    #=========================================================================================#
    #=== SendPortTranformCollection::Add is marked internal in ExplorerOM for some reason. ===#
    #=== Use WMI to set this as a workaround through PowerShell.                           ===#
    #=========================================================================================#

    WMI_AddOutboundTransformToPort $Catalog.Transforms["CBRSample.CBRInput2CANMap"] $CanadaPort.Name

    Write-Host
}

以下是运行 Windows PowerShell 脚本以创建两个新端口的示例输出。 如前所述,还可以在 BizTalk Server 管理控制台中验证新端口。

PS C:\> .\CBR.ps1

Adding SendportUSOrders to catalog ...
WMI Processing Transform...
PortName : SendportUSOrders
Transform : CBRSample.CBRInput2USMap,CBRSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba2e1651515c6db7

Adding SendportUSOrders to catalog ...
WMI Processing Transform...
PortName : SendportCANOrders
Transform : CBRSample.CBRInput2CANMap,CBRSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba2e1651515c6db7

另请参阅

管理员-ExplorerOM (BizTalk Server 示例文件夹) CBRSample (BizTalk Server 示例)