SendPortGroups (BizTalk Server-Beispiel)
Im SendPortGroups-Beispiel wird veranschaulicht, wie Sendeportgruppen mithilfe der Microsoft.BizTalk.ExplorerOM-Verwaltungsklassen aufgezählt 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 SendPortGroup-Klassen aus dem Microsoft.BizTalk.ExplorerOM-Namespace zum Verwalten von Sendeportgruppen 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 einer neuen Sendeportgruppe mit Namen „My Send Port Group“.
Aufzählen von Sendeportgruppen zur Anzeige der neu erstellten Sendeportgruppe
Löschen der neuen Sendeportgruppe
Zusätzliche Funktionen sind im Beispiel vorhanden, werden aber in der Visual C#-Version nicht ausgeführt. Einige dieser zusätzlichen Funktionen werden im PowerShell-Beispielskript demonstriert. Die zusätzlichen Funktionen stellen die folgende Funktionalität bereit:
Hinzufügen eines Sendeport zu der neu erstellten Sendeportgruppe (wird im PowerShell-Beispiel demonstriert)
Löschen eines Sendeport aus der Sendeportgruppe (wird im PowerShell-Beispiel demonstriert)
Starten der Sendeportgruppe
Stoppen der Sendeportgruppe
Speicherort dieses Beispiels
Das Beispiel ist im folgenden SDK-Verzeichnis gespeichert:
<Beispielpfad>\Admin\ExplorerOM\SendPortGroups
In der folgenden Tabelle werden die Dateien in diesem Beispiel samt Zweck beschrieben.
Datei(en) | BESCHREIBUNG |
---|---|
SendPortGroups.cs | Visual C#-Quelldatei für Vorgänge, die in diesem Beispiel veranschaulicht werden. |
SendPortGroups.sln, SendPortGroups.csproj, SendPortGroups.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 SendPortGroups.sln.
Doppelklicken Sie in Projektmappen-Explorer auf SendPortGroups.cs, um den Beispielcode zu öffnen.
Suchen Sie in
root.ConnectionString
derCreateSendPortGroup
Funktion nach. Sie müssen die Serverspezifikation so ändern, dass sie auf den SQL-Server verweist, der als Host für die BizTalk-Verwaltungsdatenbank dient. Sie können auch einen Punkt (.) verwenden, um die Verbindung zum lokalen SQL-Server herzustellen. Beispiel:root.ConnectionString = "Integrated Security=SSPI;database=BizTalkMgmtDb;server=.";
Wiederholen Sie Schritt 3 für die folgenden Funktionen:
EnumerateSendPortGroups
DeleteSendPortGroup
Speichern Sie SendPortGroups.cs.
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\SendPortGroups\bin\Debug
Führen Sie die Datei SendPortGroups.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 CreateSendPortGroup($Catalog, $strName)
{
#=== 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 send port group and set its name ===#
$NewSendPortGroup = $Catalog.AddNewSendPortGroup()
$NewSendPortGroup.Name = $strName
#=== Persist new ports to the BizTalk Management database ===#
Write-Host Adding "`"$($NewSendPortGroup.Name)`"..."
$catalog.SaveChanges();
Write-Host "`r`nCreateSendPortGroup() completed."
}
Function DeleteSendPortGroup($Catalog,$strName)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered DeleteSendPortGroup:`r`n"; $_; "`r`nDiscarding Changes.`r`n";$Catalog.DiscardChanges();}
#=== Delete this sample's new send ports by name ===#
$NewSendPortGroup = $Catalog.SendPortGroups[$strName]
$Catalog.RemoveSendPortGroup($NewSendPortGroup)
#=== Persist changes to the BizTalk Management database ===#
Write-Host "Deleting `"$strName`"..."
$catalog.SaveChanges();
Write-Host "DeleteSendPortGroup() completed."
}
Function EnumerateSendPortGroups($Catalog)
{
#=== Register a trap handler to discard changes on exceptions ===#
$ErrorActionPreference="silentlycontinue"
trap { "Exception encountered During Enumeration:`r`n"; $_; "`r`n"}
#=== Display all send port groups by name ===#
$count = 1
foreach ($group in $catalog.SendPortGroups)
{
Write-Host "$count. $($group.Name)"
$count++
}
Write-Host "`r`nEnumerateSendPortGroups() completed."
}
Function PromptForSendPort($Catalog)
{
#=== Provide a list of the send ports for the user to make a selection ===#
Write-Host "Here is a list of send ports:`r`n"
$count = 1
foreach($sendport in $Catalog.SendPorts)
{
Write-Host ($Count). ($Sendport.Name)
$count++
}
Write-Host "`r`nChoose a port to add to the group by ordinal (ex. 1,2, etc): " -nonewline
$selection = read-host
$selection = $Catalog.SendPorts[([int]$selection)-1]
Write-Host $Selection.Name selected.
return $Selection.Name
}
Function AddSendPortToSendPortGroup($Catalog,$strPortName,$strGroupName)
{
#=== Add the user's selected send port to the group ===#
#========================================================#
#=== Presently, we have to use WMI from PowerShell ===#
#=== This is because the methods on the collections ===#
#=== are marked internal. So unfortunately the ===#
#=== following very straightforward code won't work. ===#
#========================================================#
# $sendportgroup = $Catalog.SendPortGroups[$strName]
# $sendportgroup.SendPorts.Add($Catalog.SendPorts[$strPortName])
# $catalog.SaveChanges();
#============================================================================#
#=== Get the WMI send port group representation to look up DB and server. ===#
#=== Expecting only one to match the query in this example. ===#
#============================================================================#
$WQL = "select * from MSBTS_SendPortGroup where Name='" + $strGroupName + "'"
$groupset = gwmi -query ($WQL) -namespace "root\MicrosoftBizTalkServer"
#=== Create a new MSBTS_SendPortGroup2SendPort instance to map the port to the group ===#
$group2port = [WMICLASS]"root\MicrosoftBizTalkServer:MSBTS_SendPortGroup2SendPort"
$newPortEntry = [WMI] $group2port.psbase.CreateInstance()
$newPortEntry.MgmtDbServerOverride = $groupset.MgmtDbServerOverride
$newPortEntry.MgmtDbNameOverride = $groupset.MgmtDbNameOverride
$newPortEntry.SendPortGroupName = $groupset.Name
$newPortEntry.SendPortName = $strPortName
Write-Host "Adding $strPortName to $($groupset.Name)"
#=== Persist changes to the BizTalk Management database ===#
#=== POWERSHELL V1 BUG WORKAROUND =============================#
#=== First method call on a non-cimv2 WMI object can fail. ===#
#=== The workaround in PowerShell V1 is to call GetType() ===#
#=== as the first method. ===#
$ErrorActionPreference="silentlycontinue"
trap {}
$newPortEntry.GetType()
#=== POWERSHELL V1 BUG WORKAROUND =============================#
$ErrorActionPreference="continue"
[void] $newPortEntry.Put()
#=== Since we used WMI to update the BizTalk Management database, ===#
#=== refresh our BtsExplorerCatalog to have an updated DB view. ===#
$Catalog.Refresh()
Write-Host "AddSendPortToSendPortGroup() completed."
}
Function DeleteSendPortFromSendPortGroup($Catalog, $strPortName, $strGroupName)
{
#========================================================#
#=== Presently, we have to use WMI from PowerShell ===#
#=== This is because the methods on the collections ===#
#=== are marked internal. So unfortunately the ===#
#=== following very straightforward code won't work. ===#
#========================================================#
# $sendportgroup = $Catalog.SendPortGroups[$strGroupName]
# $sendportgroup.SendPorts.Remove($Catalog.SendPorts[$strPortName])
# $catalog.SaveChanges();
#============================================================================#
#=== Get the WMI send port to group instance and delete it. ===#
#=== Expecting only one to match the query in this example. ===#
#============================================================================#
$WQL = "select * from MSBTS_SendPortGroup2SendPort where " +
"SendPortName='" + $strPortName + "' and " +
"SendPortGroupName='" + $strGroupName + "'"
$groupset = gwmi -query ($WQL) -namespace "root\MicrosoftBizTalkServer"
write-host "Removing $strPortName from $strGroupName..."
$groupset.Delete();
#=== Since we used WMI to update the BizTalk Management database, ===#
#=== refresh our BtsExplorerCatalog to have an updated DB view. ===#
$Catalog.Refresh()
Write-Host "DeleteSendPortFromSendPortGroup() completed."
}
#========================#
#=== 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 = "DATABASE=BizTalkMgmtDb;Integrated Security=SSPI;SERVER=."
#=== Exercise the CreateSendPortGroup function to create a new send port group ===#
$SendPortGroupName = "PowerShell Sample Send Port Group"
Write-Host "`r`n============================="
Write-Host "=== CreateSendPortGroup() ==="
Write-Host "=============================`r`n"
CreateSendPortGroup $Catalog $SendPortGroupName
#=== Enumerate all send port groups to view the new one ===#
Write-Host "`r`n================================="
Write-Host "=== EnumerateSendPortGroups() ==="
Write-Host "=================================`r`n"
EnumerateSendPortGroups $Catalog
#=== Add a send port to the group ===#
Write-Host "`r`n===================================="
Write-Host "=== AddSendPortToSendPortGroup() ==="
Write-Host "====================================`r`n"
$SendPortName = PromptForSendPort($Catalog)
AddSendPortToSendPortGroup $Catalog $SendPortName $SendPortGroupName
#=== Remove the send port from the group ===#
Write-Host "`r`n========================================="
Write-Host "=== DeleteSendPortFromSendPortGroup() ==="
Write-Host "=========================================`r`n"
DeleteSendPortFromSendPortGroup $Catalog $SendPortName $SendPortGroupName
#=== Delete the group ===#
Write-Host "`r`n============================="
Write-Host "=== DeleteSendPortGroup() ==="
Write-Host "=============================`r`n"
DeleteSendPortGroup $Catalog $SendPortGroupName
Write-Host
Nachfolgend sehen Sie ein Beispiel für die erwartete Ausgabe der Ausführung des Windows PowerShell-Skripts.
PS C:\> .\sendportgroups.ps1
=============================
=== CreateSendPortGroup() ===
=============================
Adding "PowerShell Sample Send Port Group"...
CreateSendPortGroup() completed.
=================================
=== EnumerateSendPortGroups() ===
=================================
1. PowerShell Sample Send Port Group
EnumerateSendPortGroups() completed.
====================================
=== AddSendPortToSendPortGroup() ===
====================================
Here is a list of send ports:
1 . ResendPort
2 . HelloWorldSendPort
3 . ToCustomerSendPort
4 . CBRUSSendPort
5 . CBRCANSendPort
6 . SendportCANOrders
Choose a port to add to the group by ordinal (ex. 1,2, etc): 2
HelloWorldSendPort selected.
Adding HelloWorldSendPort to PowerShell Sample Send Port Group
AddSendPortToSendPortGroup() completed.
=========================================
=== DeleteSendPortFromSendPortGroup() ===
=========================================
Removing HelloWorldSendPort from PowerShell Sample Send Port Group...
DeleteSendPortFromSendPortGroup() completed.
=============================
=== DeleteSendPortGroup() ===
=============================
Deleting "PowerShell Sample Send Port Group"...
DeleteSendPortGroup() completed.