SendPorts (BizTalk Server-Beispiel)
Das SendPorts-Beispiel veranschaulicht, wie Sendeports mithilfe der Microsoft.BizTalk.ExplorerOM-Verwaltungsklassen aufgelistet und verwaltet werden.
Voraussetzungen
Sie müssen über BizTalk Server Administratorrechte verfügen, um die Administrativen Objekte in diesem Beispiel verwenden zu können.
Für die Skriptausführung erfordert das Windows PowerShell-Skript die Windows PowerShell-Ausführungsrichtlinie. Weitere Informationen finden Sie unter about_Execution_Policies.
Ziel des Beispiels
Dieses Beispiel veranschaulicht die Verwendung der BtsCatalogExplorer- und SendPort-Klassen aus dem Microsoft.BizTalk.ExplorerOM-Namespace zum Verwalten von Sendeports in einer BizTalk Server Umgebung. Das Beispiel ist in Microsoft Visual C# geschrieben. Ein Windows PowerShell-Beispielskript ist ebenfalls Bestandteil dieses Themas. Mit dem Beispiel werden die folgenden Vorgänge veranschaulicht:
Herstellen einer Verbindung mit der BizTalk Management-Datenbank mithilfe der BtsCatalogExplorer-Klasse .
Erstellen von zwei neuen Sendeports namens myStaticOnewaySendPort1 und myDynamicTwowaySendPort1. myStaticOnewaySendPort1 ist, wie der Name schon sagt, ein statischer unidirektionaler Sendeport. Es wird erstellt, um den HTTP-Transport mit einer Beispielziel-URL zu verwenden. http://sample1. myDynamicTwowaySendPort1 wird als dynamischer bidirektionaler Sendeport erstellt.
Auflisten von Sendeports in einer BizTalk Server Umgebung. Diese Beispielauflistung sollte zwei neue Sendeports umfassen.
Löschen der zwei neuen Sendeports
Konfigurieren der neuen Sendeports: Die im Rahmen des Beispiels veranschaulichten Konfigurationen werden auf den Beispielsendeport myStaticOnewaySendPort1 angewendet. Die im Beispiel angewendeten Konfigurationen umfassen Folgendes:
Aktivieren der Option Anforderungsnachricht vor Portverarbeitung zum Nachverfolgen von Nachrichtentexten.
Aktivieren der Option Nachricht nach Portverarbeitung anfordern zum Nachverfolgen von Nachrichtentexten.
Angeben eines Verschlüsselungszertifikats, das vom Sendeport für ausgehende Nachrichten verwendet wird
Angeben eines Filters zum Eintragen einer Gruppe von Nachrichten
Hinzufügen einer Zuordnung zum Transformieren der Nachrichten
Ändern des Sendportstatus der zwei neuen Sendeports. Bei der Ausführung des Beispiels werden am Sendeport myStaticOnewaySendPort1 die folgenden Statusänderungen vorgenommen:
Der Status wird in Gestartet geändert.
Der Status wird in Beendet geändert.
Der Status wird in Gebunden geändert. Der Status Gebunden entspricht dem Status Ausgetragen.
Speicherort dieses Beispiels
Das Beispiel ist im folgenden SDK-Verzeichnis gespeichert:
<Beispielpfad>\Admin\ExplorerOM\SendPorts
In der folgenden Tabelle werden die Dateien in diesem Beispiel samt Zweck beschrieben.
Datei(en) | BESCHREIBUNG |
---|---|
SendPorts.cs | Visual C#-Quelldatei für Vorgänge, die in diesem Beispiel veranschaulicht werden. |
SendPorts.sln, SendPorts.csproj, SendPorts.suo | Die Projektmappen- und Projektdateien für das Beispiel. |
Erstellen und Ausführen dieses Beispiels
So erstellen Sie dieses Beispiel
Öffnen Sie in Visual Studio die Projektmappendatei SendPorts.sln.
Klicken Sie im Menü Standard auf Erstellen, und klicken Sie dann auf Projektmappe erstellen.
So führen Sie dieses Beispiel aus
Öffnen Sie ein Befehlsfenster, und navigieren Sie zum folgenden Ordner:
<Beispielpfad>\Admin\ExplorerOM\SendPorts\bin\Debug
Führen Sie die Datei SendPorts.exe aus.
Beispiel für ein Windows PowerShell-Skript
Das folgende Windows PowerShell Skriptfragment kann verwendet werden, um die gleichen Features der ExplorerOM-Klassen zu veranschaulichen:
Function CreateSendPorts($Catalog)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }
#=== create a new static one-way send port using HTTP transport ===#
$myStaticOnewaySendPort = $Catalog.AddNewSendPort($false,$false)
$myStaticOnewaySendPort.Name = "myStaticOnewaySendPort1"
$myStaticOnewaySendPort.PrimaryTransport.TransportType = $catalog.ProtocolTypes["HTTP"]
$myStaticOnewaySendPort.PrimaryTransport.Address = "http://sample1"
$myStaticOnewaySendPort.SendPipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.XMLTransmit"]
#=== create a new dynamic two-way send port ===#
$myDynamicTwowaySendPort = $catalog.AddNewSendPort($true,$true)
$myDynamicTwowaySendPort.Name = "myDynamicTwowaySendPort1";
$myDynamicTwowaySendPort.SendPipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.XMLTransmit"];
$myDynamicTwowaySendPort.ReceivePipeline = $Catalog.Pipelines["Microsoft.BizTalk.DefaultPipelines.XMLReceive"];
#=== Persist new ports to BizTalk configuration database ===#
Write-Host Adding $myStaticOnewaySendPort.Name...
Write-Host Adding $myDynamicTwowaySendPort.Name...
$catalog.SaveChanges();
Write-Host "`r`nCreateSendPorts() completed."
}
Function DeleteSendPorts($Catalog)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }
#=== Delete this sample's new send ports by name ===#
$Catalog.RemoveSendPort($Catalog.SendPorts["myStaticOnewaySendPort1"])
$Catalog.RemoveSendPort($Catalog.SendPorts["myDynamicTwowaySendPort1"])
#=== Persist changes to BizTalk configuration database ===#
$catalog.SaveChanges();
Write-Host "DeleteSendPorts() completed."
}
Function EnumerateSendPorts($Catalog)
{
#=== Display all send ports and their status info ===#
$catalog.SendPorts | format-table -Property Name, Status -autosize
Write-Host "EnumerateSendPorts`(`) completed."
}
Function ConfigureSendPort($Catalog)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }
$sendport = $catalog.SendPorts["myStaticOnewaySendPort1"];
#=== specify tracking settings for tracking ===#
Write-Host $sendport.Name: Enabling BeforeSendPipeline and AfterSendPipeline message body tracking.
$sendport.Tracking = ([Microsoft.BizTalk.ExplorerOM.TrackingTypes] "BeforeSendPipeline" -bor
[Microsoft.BizTalk.ExplorerOM.TrackingTypes] "AfterSendPipeline")
#=== specify an encryption certificate for outgoing messages ===#
Write-Host $sendport.Name: Adding a encryption certificate
foreach ($certificate in $catalog.Certificates)
{
if ($certificate.UsageType -eq [Microsoft.BizTalk.ExplorerOM.CertUsageType] "Encryption")
{
$sendport.EncryptionCert = $certificate
}
}
#=== specify filters for content-based routing ===#
Write-Host $sendport.Name: Adding a filter
$sendport.Filter = "<Filter><Group>" +
"<Statement Property='SMTP.Subject' Operator='0' Value='Purchase Order'/>" +
"<Statement Property='SMTP.From' Operator='0' Value='Customer'/>" +
"</Group></Filter>"
#=== specify transform maps for document normalization ===#
foreach ($transform in $catalog.Transforms)
{
if (($transform.SourceSchema.FullName -ieq "myPO") -and (transform.TargetSchema.FullName -ieq "partnerPO"))
{
Write-Host $sendport.Name: Adding a transform
$sendport.OutboundTransforms.Add($transform)
}
}
#=== Persist all changes to BizTalk configuration database ===#
Write-Host $sendport.Name: Saving changes
$catalog.SaveChanges();
Write-Host "`r`nConfigureSendPort() completed."
}
Function ChangeSendPortStatus($Catalog)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();exit; }
$sendport = $catalog.SendPorts["myStaticOnewaySendPort1"];
#=== start the send port to begin processing messages ===#
$sendport.Status = [Microsoft.BizTalk.ExplorerOM.PortStatus] "Started"
Write-Host Changing ($sendport.Name) status to ($sendport.Status)...
$catalog.SaveChanges();
Write-Host Complete.
#=== stop the send port to stop processing and suspend messages ===#
$sendport.Status = [Microsoft.BizTalk.ExplorerOM.PortStatus] "Stopped"
Write-Host Changing ($sendport.Name) status to ($sendport.Status)...
$catalog.SaveChanges();
Write-Host Complete.
#=== unenlist the send port to stop processing and discard messages ===#
$sendport.Status = [Microsoft.BizTalk.ExplorerOM.PortStatus] "Bound"
Write-Host Changing ($sendport.Name) status to ($sendport.Status)`(Unenlisted`)...
$catalog.SaveChanges();
Write-Host Complete.
}
#=== Main Script Body ===#
#=== 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"
#=== Exercise the CreateSendPorts function to create the two new ports ===#
Write-Host "`r`n========================="
Write-Host "=== CreateSendPorts`(`) ==="
Write-Host "=========================`r`n"
CreateSendPorts $Catalog
#=== Enumerate all send ports to view the two new ports ===#
Write-Host "`r`n============================"
Write-Host "=== EnumerateSendPorts`(`) ==="
Write-Host "============================`r`n"
EnumerateSendPorts $Catalog
#=== Add some configuration to the static send port ===#
Write-Host "`r`n==========================="
Write-Host "=== ConfigureSendPort`(`) ==="
Write-Host "===========================`r`n"
ConfigureSendPort $Catalog
#=== Cycle through some status changes on the static send port ===#
Write-Host "`r`n=============================="
Write-Host "=== ChangeSendPortStatus`(`) ==="
Write-Host "==============================`r`n"
ChangeSendPortStatus $Catalog
#=== Delete the two new ports ===#
Write-Host "`r`n========================="
Write-Host "=== DeleteSendPorts`(`) ==="
Write-Host "=========================`r`n"
DeleteSendPorts $Catalog
Write-Host
Nachfolgend sehen Sie ein Beispiel für die erwartete Ausgabe der Ausführung des Windows PowerShell-Skripts.
PS C:\> & 'C:\SendPorts.ps1'
=========================
=== CreateSendPorts() ===
=========================
Adding myStaticOnewaySendPort1 ...
Adding myDynamicTwowaySendPort1 ...
CreateSendPorts() completed.
============================
=== EnumerateSendPorts() ===
============================
Name Status
---- ------
ResendPort Started
HelloWorldSendPort Started
ToCustomerSendPort Started
CBRUSSendPort Started
CBRCANSendPort Started
SendportCANOrders Bound
myStaticOnewaySendPort1 Bound
myDynamicTwowaySendPort1 Bound
EnumerateSendPorts() completed.
===========================
=== ConfigureSendPort() ===
===========================
myStaticOnewaySendPort1 : Enabling BeforeSendPipeline and AfterSendPipeline message body tracking.
myStaticOnewaySendPort1 : Adding a encryption certificate
myStaticOnewaySendPort1 : Adding a filter
myStaticOnewaySendPort1 : Saving changes
ConfigureSendPort() completed.
==============================
=== ChangeSendPortStatus() ===
==============================
Changing myStaticOnewaySendPort1 status to Started ...
Complete.
Changing myStaticOnewaySendPort1 status to Stopped ...
Complete.
Changing myStaticOnewaySendPort1 status to Bound (Unenlisted)...
Complete.
=========================
=== DeleteSendPorts() ===
=========================
DeleteSendPorts() completed.