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 サンプルに 2 つの新しいポートを追加する方法を示します。 これらの新しいポートは、CBRApplication のサンプル ポートです。 これらのポートは、HTTP アダプターを使用してメッセージを仮の HTTP Web サービス アドレスにルーティングするように構成されます。 このサンプルでは、 ExplorerOM オブジェクトを使用して次の操作を実行する方法を示します。
Application クラスの AddNewSendPort メソッドを使用して、SendportUSOrders という新しい送信ポートを CBRApplication に追加します。 このポートは、仮の Web アドレスによるトランスポートで HTTP アダプターを使用するように構成されます。
米国の国コードの値 100 を持つ CBRApplication のメッセージをサブスクライブするフィルターを SendportUSOrders に追加します。
米国ベースのメッセージを変換するための CBRApplication マップを SendportUSOrders の送信マップに追加します。
新しい送信ポート SendportCANOrders を CBRApplication に追加し、仮の Web アドレスによるトランスポートで HTTP アダプターを使用するようにこのポートを構成します。
カナダの国コードの値 200 を持つ CBRApplication のメッセージをサブスクライブするフィルターを SendportCANOrders に追加します。
カナダ ベースのメッセージを変換するための CBRApplication マップを SendportCANOrders の送信マップに追加します。
このサンプルの場所
このサンプルは、SDK がある次の場所にあります。
<サンプル パス>\管理\ExplorerOM\CBR
次の表は、このサンプルのファイルとその目的を示しています。
ファイル | 説明 |
---|---|
ContentBasedRouting.cs | このサンプルで示されている操作用の Visual C# ソース ファイル。 |
CBR.sln,CBR.csproj,CBR.suo | このサンプルのソリューション ファイルとプロジェクト ファイル。 |
このサンプルのビルドおよび実行
このサンプルをビルドするには
CBRSample をビルド、展開、および構成する手順が完了していることを確認します。 これらの手順は、CBRSample (BizTalk Server サンプル) で提供されています。
Visual Studio で、ソリューション ファイル CBR.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。
このサンプルを実行するには
BizTalk Server管理コンソールを開き、CBRApplication ノードに移動します。
[CBRApplication] ノードを展開して、[送信ポート] ノードに CBRUSSendPort と CBRCANSendPort として表示されているポートが 2 つだけであることを確認します。
コマンド ウィンドウを開き、次のフォルダーに移動します。
<サンプル パス>\管理\ExplorerOM\CBR\bin\Debug
CBR.exe ファイルを実行します。
BizTalk Server管理コンソールで F5 キーを押して、[送信ポート] ノードのビューを更新します。 このサンプルによって、2 つの新しいポートが 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 スクリプトを実行して 2 つの新しいポートを作成した場合の出力例を示します。 上記のように、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 Samples フォルダー)CBRSample (BizTalk Server サンプル)