Condividi tramite


SendPorts (esempio di BizTalk Server)

L'esempio SendPorts illustra come enumerare e gestire le porte di invio usando le classi di amministrazione Microsoft.BizTalk.ExplorerOM .

Prerequisiti

  • È necessario disporre di BizTalk Server privilegi amministrativi per usare gli oggetti amministrativi in questo esempio.

  • L'esecuzione dello script di Windows PowerShell richiede i criteri di esecuzione di Windows PowerShell. Per altre informazioni, vedere about_Execution_Policies.

Scopo dell'esempio

Questo esempio illustra l'uso delle classi BtsCatalogExplorer e SendPort dallo spazio dei nomi Microsoft.BizTalk.ExplorerOM per gestire le porte di invio in un ambiente BizTalk Server. L'esempio viene scritto in Microsoft Visual C#. In questo argomento è inoltre incluso uno script di esempio Windows PowerShell. Nell'esempio vengono illustrate le operazioni seguenti:

  1. Connessione al database di Gestione BizTalk usando la classe BtsCatalogExplorer .

  2. Creazione di due nuove porte di invio denominate myStaticOnewaySendPort1 e myDynamicTwowaySendPort1. myStaticOnewaySendPort1, come implica il nome, è una porta di trasmissione statica unidirezionale. Viene creato per usare il trasporto HTTP con un URL di destinazione di esempio http://sample1. myDynamicTwowaySendPort1 viene creato come porta di trasmissione dinamica bidirezionale.

  3. Enumerazione delle porte di invio in un ambiente BizTalk Server. Questa enumerazione di esempio dovrebbe includere le due nuove porte di trasmissione.

  4. Eliminazione delle due nuove porte di trasmissione.

  5. Configurazione delle nuove porte di trasmissione. Le configurazioni illustrate nell'esempio si applicano alla porta di trasmissione di esempio denominata myStaticOnewaySendPort1. Le configurazioni applicate dall'esempio includono:

    • Abilitazione dell'opzione Richiedi messaggio prima dell'elaborazione delle porte per il rilevamento dei corpi dei messaggi.

    • Abilitazione dell'opzione Richiedi messaggio dopo l'elaborazione delle porte per il rilevamento dei corpi dei messaggi.

    • Definizione di un certificato di crittografia per la porta di trasmissione da utilizzare con i messaggi in uscita.

    • Definizione di un filtro per l'integrazione con un set di messaggi.

    • Aggiunta di una mappa per trasformare i messaggi.

  6. Modifica dello stato delle due nuove porte di trasmissione. Con l'esecuzione dell'esempio verranno applicate le modifiche di stato seguenti su myStaticOnewaySendPort1:

    • Modifica dello stato in Avviato.

    • Modifica dello stato in Arrestato.

    • Modifica dello stato in Associato. Questo stato è identico a Rimosso.

Percorso dell'esempio

L'esempio è disponibile nel seguente percorso dell'SDK:

<Percorso> esempi\Amministrazione\ExplorerOM\SendPorts

Nella seguente tabella sono riportati i file inclusi nell'esempio e ne viene descritto lo scopo.

File Descrizione
SendPorts.cs File di origine visual C# per le operazioni illustrate in questo esempio.
SendPorts.sln, SendPorts.csproj, SendPorts.suo File di soluzione e di progetto per l'esempio.

Compilazione ed esecuzione dell'esempio

Per generare l'esempio

  1. In Visual Studio aprire il file di soluzione SendPorts.sln.

  2. Nel menu principale fare clic su Compila e quindi su Compila soluzione.

Per eseguire questo esempio

  1. Aprire una finestra di comando e passare alla cartella seguente:

    <Percorso> esempi\Amministrazione\ExplorerOM\SendPorts\bin\Debug

  2. Eseguire il file SendPorts.exe.

Esempio di script di Windows PowerShell

Il frammento di script Windows PowerShell seguente può essere usato per illustrare le stesse funzionalità delle classi 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

Di seguito è riportato l'output di esempio previsto in seguito all'esecuzione dell'esempio di 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.

Vedere anche

Admin-ExplorerOM (cartella di esempi di BizTalk Server)