SendPorts (exemple BizTalk Server)
L’exemple SendPorts montre comment énumérer et gérer les ports d’envoi à l’aide des classes d’administration Microsoft.BizTalk.ExplorerOM .
Prérequis
Vous devez disposer BizTalk Server privilèges d’administration pour utiliser les objets administratifs de cet exemple.
La stratégie d'exécution de Windows PowerShell doit autoriser l'exécution des scripts. Pour plus d’informations, consultez about_Execution_Policies.
Fonctions de l'exemple
Cet exemple illustre l’utilisation des classes BtsCatalogExplorer et SendPort de l’espace de noms Microsoft.BizTalk.ExplorerOM pour gérer les ports d’envoi dans un environnement BizTalk Server. L’exemple est écrit dans Microsoft Visual C#. Un exemple de script Windows PowerShell est également inclus dans cette rubrique. Il illustre les opérations suivantes :
Connexion à la base de données BizTalk Management à l’aide de la classe BtsCatalogExplorer .
Création de deux ports d’envoi nommés myStaticOnewaySendPort1 et myDynamicTwowaySendPort1. myStaticOnewaySendPort1, comme son nom l’indique, est un port d’envoi unidirectionnel statique. Il est créé pour utiliser le transport HTTP avec un exemple d’URL de destination http://sample1. myDynamicTwowaySendPort1 est créé en tant que port d’envoi bidirectionnel dynamique.
Énumération des ports d’envoi dans un environnement BizTalk Server. Cet exemple d'énumération doit inclure les deux nouveaux ports d'envoi ;
suppression des deux nouveaux ports ;
configuration des nouveaux ports d'envoi. Les configurations illustrées par l'exemple sont appliquées à l'exemple de port d'envoi nommé myStaticOnewaySendPort1. Les configurations appliquées par l'exemple sont les suivantes :
Activation de l’option Demander un message avant le traitement du port pour le suivi des corps de message.
Activation de l’option Demander un message après le traitement du port pour le suivi des corps de message.
spécification d'un certificat de chiffrement utilisé par le port d'envoi sur les messages sortants ;
spécification d'un filtre pour l'inscription par rapport à un ensemble de messages ;
ajout d'un mappage pour transformer les messages ;
modification de l'état des deux nouveaux ports d'envoi. L'exécution de l'exemple effectue les modifications d'état suivantes sur le port myStaticOnewaySendPort1 :
définition de l'état sur Démarré ;
définition de l'état sur Arrêté ;
définition de l'état sur Lié. L'état Lié est équivalent à l'état Désinscrit.
Accès à l'exemple
L'exemple se trouve dans l'emplacement SDK suivant :
<Chemin d’accès> des exemples\Administration\ExplorerOM\SendPorts
Le tableau suivant présente les fichiers de cet exemple et décrit leur fonction.
Fichier(s) | Description |
---|---|
SendPorts.cs | Fichier source Visual C# pour les opérations illustrées dans cet exemple. |
SendPorts.sln, SendPorts.csproj, SendPorts.suo | Fichiers de projet et de solution de l'exemple. |
Création et exécution de l'exemple
Pour créer l'exemple
Dans Visual Studio, ouvrez le fichier solution SendPorts.sln.
Dans le menu main, cliquez sur Générer, puis sur Générer la solution.
Pour exécuter l'exemple
Ouvrez une fenêtre de commande, puis accédez au dossier suivant :
<Chemin d’accès> des exemples\Administration\ExplorerOM\SendPorts\bin\Debug
Exécutez le fichier SendPorts.exe.
Exemple de script Windows PowerShell
Le fragment de script Windows PowerShell suivant peut être utilisé pour illustrer les mêmes fonctionnalités que les classes ExplorerOM :
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
Voici la sortie attendue de l'exécution de l'exemple de script Windows PowerShell.
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.