共用方式為


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 配接器搭配假設的網址進行傳輸。

  • 將篩選新增至 SendportUSOrders,以使用美國國家/地區代碼值 100 訂閱 CBRApplication 中的訊息。

  • 將 CBRApplication 對應新增至 SendportUSOrders 的輸出對應,以轉換美國訊息。

  • 將名為 SendportCANOrders 的新傳送埠新增至 CBRApplication,並將它設定為使用 HTTP 配接器搭配假設的網址進行傳輸。

  • 將篩選新增至 SendportCANOrders,以使用加拿大國家/地區代碼值為 200 的 CBRApplication 訂閱訊息。

  • 將 CBRApplication 對應新增至 SendportCANOrders 的輸出對應,以轉換加拿大訊息。

此範例的位置

這個範例位於下列 SDK 位置:

<範例路徑>\管理員\ExplorerOM\CBR

下表顯示此範例中的檔案,並描述其用途。

檔案 Description
ContentBasedRouting.cs 此範例中示範之作業的 Visual C# 原始程式檔。
CBR.sln、CBR.csproj、CBR.suo 此範例的方案和專案檔。

建置和執行此範例

建置此範例

  1. 請確定您已完成建置、部署和設定 CBRSample 的步驟。 這些步驟是在CBRSample (BizTalk Server 範例) 中提供。

  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 範例)