Freigeben über


Optimieren der Orchestrierungsleistung

In diesem Thema werden bewährte Methoden für die Verwendung von Orchestrierungen in BizTalk Server Lösungen beschrieben. Dazu gehören Empfehlungen für:

  • Verringern der Latenz von BizTalk Server Lösungen, die Orchestrierungen verwenden

    • Entfernen von Orchestrierungen für reine Messagingmuster

    • Verwenden von Inlinesendungen von Orchestrierungen

    • Minimieren von Orchestrierungspersistenzpunkten

  • Schachteln von Orchestrierungen

  • Orchestrierungsentwurfsmuster

  • Orchestrierungsausnahmebehandlungsblöcke

Empfehlungen zum Optimieren von Orchestrierungen für Szenarien mit geringer Latenz

Die folgenden Techniken können verwendet werden, um die Latenz von BizTalk Server Lösungen zu verringern, die Orchestrierungen verwenden.

Beseitigen von Orchestrierungen für reine Messagingmuster

Minimieren Sie nach Möglichkeit die Verwendung von Orchestrierungen, um den Gesamtdurchsatz zu erhöhen und die Latenz von Geschäftsprozessen zu verringern. Wenn es nicht erforderlich ist, Transaktionen mit langer Ausführungszeit auszuführen, und es nicht erforderlich ist, mehrere Systeme für jede Anforderung aufzurufen, sollten Sie orchestrieren und Geschäftslogik in Empfangs- und Sendeports verschieben, um die Gesamtzahl der Roundtrips zu BizTalkMsgBoxDb zu reduzieren und die Latenz aufgrund des Datenbankzugriffs zu verringern. Implementieren Sie in diesem Fall benutzerdefinierte Pipelines, und verwenden Sie Hilfsklassen, die zuvor aus Orchestrierungen aufgerufen wurden. Verwenden Sie Orchestrierungen nur, wenn dies unbedingt erforderlich ist, um Entwurfsmuster wie Scatter und Gather oder Convoys zu implementieren. Weitere Informationen zu Orchestrierungsentwurfsmustern finden Sie im Thema Implementieren von Entwurfsmustern in Orchestrierungen (https://go.microsoft.com/fwlink/?LinkId=140042) in der BizTalk Server-Dokumentation.

Verwenden von Inlinesendungen von Orchestrierungen, um Szenarien mit geringer Latenz zu berücksichtigen

Minimieren Sie nach Möglichkeit die Verwendung von Orchestrierungen, und bevorzugen Sie reine Messagingmuster, um den Gesamtdurchsatz zu erhöhen und die Latenz der Geschäftsprozesse zu verringern. Wenn transaktionen mit langer Ausführungszeit nicht erforderlich sind und keine Geschäftslogik mehrere Systeme aufrufen muss, sollten Sie erwägen, Geschäftslogik zu verschieben, um Ports zu empfangen und zu senden, und vermeiden Sie die Verwendung von Orchestrierungen. Dieser Ansatz kann mit benutzerdefinierten Pipelines implementiert werden, die die Hilfsklassen wiederverwenden, die zuvor von Orchestrierungen aufgerufen wurden. Um eine bessere Leistung in Szenarien mit geringer Latenz zu erzielen, verwenden Sie einen der folgenden Ansätze:

  • Vermeiden Sie unnötige Orchestrierungen, und verwenden Sie reine Messagingmuster, um die Gesamtzahl der Roundtrips zur BizTalk MessageBox-Datenbank zu reduzieren. Bei diesem Ansatz wird eine geringe Latenz berücksichtigt, da Inlinesendungen die BizTalk-Messaging-Engine und den damit verbundenen Mehraufwand umgehen. Orchestrierungs-Inline-Sendefunktionen werden mit BizTalk Server 2006 und höher bereitgestellt.

  • Vermeiden Sie innerhalb von Orchestrierungen logische Ports, die an physische Ports gebunden sind, und verwenden Sie an deren Stelle Inlinesendungen. Beispielsweise könnte ein Inlinesende verwendet werden, um eine instance einer WCF-Proxyklasse zu erstellen, um einen downstream-Webdienst oder eine ADO.NET Komponente für den Zugriff auf eine SQL Server-Datenbank aufzurufen. Im folgenden Diagramm wird eine Inlinesendung ausgeführt, wenn die Orchestrierung eine Geschäftskomponente instanziiert, die intern ein WCF-Proxyobjekt verwendet, um einen downstream-Webdienst direkt aufzurufen:

    Darstellung von BizTalk Orchestration Inline Send

Hinweis

Obwohl die Verwendung von Inlinesendungen von Orchestrierungen die Latenz erheblich reduziert, gibt es Einschränkungen für diesen Ansatz. Da Inlinesendungen die BizTalk-Messaging-Engine umgehen, ist die folgende Funktionalität, die mit der Messaging-Engine bereitgestellt wird, nicht verfügbar:

  • Transaktionale Pipelines
    • Wiederherstellbare Pipelines
    • Pipelines, die die BAM-Interceptor-API aufrufen
    • Unterstützung von BizTalk Server Adaptern
    • Batching
    • Wiederholungsversuche
    • Initialisierung des Korrelationssatzes
    • Deklarative Konfiguration
    • Sekundäre Transporte
    • Nachverfolgung
    • Deklarative Verwendung von BAM

Weitere Informationen zu den Typen von Pipelines, die nicht innerhalb einer Orchestrierung ausgeführt werden können, finden Sie im Abschnitt "Einschränkungen" des Themas Verwenden von Ausdrücken zum Ausführen von Pipelines (https://go.microsoft.com/fwlink/?LinkId=158008) in der BizTalk Server 2010-Dokumentation.

Optimieren der Orchestrierungslatenz durch Verringern der Anzahl von Persistenzpunkten, wenn möglich

Ein Orchestrierungsbereich muss nur als "Transaktion mit langer Ausführungsdauer" gekennzeichnet werden, wenn Sie Kompensations- oder Bereichstimeouts verwenden möchten. Ein transaktionsintensiver Bereich verursacht einen zusätzlichen Persistenzpunkt am Ende des Bereichs, sodass sie vermieden werden sollten, wenn Sie keine Kompensations- oder Bereichstimeouts verwenden müssen. Ein atomarer Bereich verursacht einen Persistenzpunkt am Ende des Bereichs, garantiert aber auch, dass innerhalb des atomaren Bereichs keine Persistenzpunkte auftreten. Dieser Nebeneffekt, dass keine Persistenz innerhalb des Bereichs besteht, kann manchmal zu Ihrem Vorteil verwendet werden, um Persistenzpunkte zu batchen (z. B. bei mehreren Sendevorgängen). Im Allgemeinen empfehlen wir jedoch, atomische Bereiche nach Möglichkeit zu vermeiden. Die Orchestrierungs-Engine speichert den gesamten Zustand einer ausgeführten Orchestrierung instance an verschiedenen Stellen im permanenten Speicher, sodass die instance später im Arbeitsspeicher wiederhergestellt und bis zum Abschluss ausgeführt werden kann. Die Anzahl der Persistenzpunkte in einer Orchestrierung ist einer der Schlüsselfaktoren, die die Latenz von Nachrichten beeinflussen, die durch Orchestrierungen fließen. Jedes Mal, wenn die Engine auf einen Persistenzpunkt trifft, wird der interne Zustand einer ausgeführten Orchestrierung serialisiert und im MessageBox-Element gespeichert, und dieser Vorgang verursacht Latenzkosten. Die Serialisierung des internen Zustands umfasst alle Nachrichten und Variablen, die instanziiert und noch nicht in der Orchestrierung freigegeben wurden. Je größer die Nachrichten und Variablen und je größer die Anzahl dieser Nachrichten ist, desto länger dauert es, den internen Zustand einer Orchestrierung beizubehalten. Eine übermäßige Anzahl von Persistenzpunkten kann zu einer erheblichen Leistungsminderung führen. Aus diesem Grund wird empfohlen, unnötige Persistenzpunkte aus Orchestrierungen zu entfernen, indem die Anzahl der Transaktionsbereiche und Send-Shapes reduziert wird. Dieser Ansatz ermöglicht es, die Konflikte auf der MessageBox aufgrund von Orchestrierungsdehydrierung und Rehydrierung zu verringern, die Gesamtskalierbarkeit zu erhöhen und die Orchestrierungslatenz zu verringern. Eine weitere Empfehlung besteht darin, den internen Zustand einer Orchestrierung immer so klein wie möglich zu halten. Diese Technik kann den Zeitaufwand für das Serialisieren, Beibehalten und Wiederherstellen des internen Zustands einer Orchestrierung im Falle eines Persistenzpunkts durch die XLANG-Engine erheblich reduzieren. Eine Möglichkeit, dies zu erreichen, besteht darin, Variablen und Nachrichten so spät wie möglich zu erstellen und so früh wie möglich freizugeben; Führen Sie beispielsweise nicht transaktionale Bereiche innerhalb Ihrer Orchestrierungen ein, und deklarieren Sie Variablen und Nachrichten innerhalb dieser inneren Bereiche, anstatt sie auf der obersten Ebene zu deklarieren. Weitere Informationen zum Minimieren von Orchestrierungspersistenzpunkten finden Sie in den folgenden Themen in der Dokumentation zu BizTalk Server 2010:

Richtlinien für die Verwendung höhergestufter Eigenschaften für den Zugriff auf Nachrichtentags oder Attribute aus einer Orchestrierung

Wenn Sie Eigenschaften heraufstufen müssen, sollten Sie nur die Eigenschaften heraufstufen, die für nachrichtenweiterleitung, Filter und Nachrichtenkorrelation verwendet werden. Die Heraufstufung jeder Eigenschaft erfordert die Disassemblerkomponente (XML, Flat, custom), um den Dokumenttyp zu erkennen und Daten aus der Nachricht mithilfe des XPath-Ausdrucks aus der relativen Anmerkung abzurufen, die in der XSD enthalten ist, die den Dokumenttyp definiert. Darüber hinaus verursacht jede Eigenschaftsaufstufung einen separaten Aufruf der bts_InsertProperty gespeicherten Prozedur, wenn der Nachrichten-Agent die Nachricht in der MessageBox-Datenbank veröffentlicht. Wenn eine Orchestrierung auf ein bestimmtes Element oder Attribut zugreifen muss, das in einem XML-Dokument enthalten ist, verwenden Sie eine der folgenden Techniken:

  • Reduzieren Sie die Anzahl der geschriebenen und heraufgestuften Eigenschaften, und entfernen Sie diejenigen, die nicht unbedingt erforderlich sind.

  • Vermeiden Sie unnötige differenzierte Felder. Die distinguished fields sind geschriebene Kontexteigenschaften und können problemlos einen erheblichen Platz belegen, da ihr Name dem XPath-Ausdruck entspricht, der zum Abrufen von Daten verwendet wird. Die distinguished-Eigenschaft wird als Anmerkungen in der XSD definiert, die den Dokumenttyp definiert. Die Disassemblerkomponente verwendet denselben Ansatz für heraufgestufte Eigenschaften und verwendet den XPath-Ausdruck, der ein distinguished field definiert, um es im eingehenden Dokument zu finden. Anschließend schreibt die Disassemblerkomponente eine Eigenschaft in dem Kontext, in dem:

    • Name: XPath-Ausdruck, der in der Anmerkung definiert ist.

    • Wert: Wert des Elements, das durch den XPath-Ausdruck in einem eingehenden Dokument identifiziert wird.

      Die XPath-Ausdrücke können sehr lang sein, insbesondere wenn das betreffende Element sehr tief im Dokumentschema liegt. Je differenzierter Felder, desto größer ist die Kontextgröße. Dies wiederum wirkt sich negativ auf die Gesamtleistung aus.

  • Verwenden Sie die integrierte XPath-Funktion, die von der Orchestrierungslaufzeit bereitgestellt wird.

  • Wenn Nachrichten recht klein (einige Kilobyte) und XML-formatiert sind, können Sie die Nachricht in eine .NET-Klasse deserialisieren instance und mit öffentlichen Feldern und Eigenschaften arbeiten. Wenn die Nachricht eine komplexe Ausarbeitung (benutzerdefinierter Code, Richtlinien der Geschäftsregel-Engine usw.) benötigt, ist der Zugriff auf Daten mithilfe der Eigenschaften, die von einem instance einer .NET-Klasse verfügbar gemacht werden, mithilfe von XPath-Ausdrücken viel schneller. Wenn die von der Orchestrierung aufgerufene Geschäftslogik abgeschlossen ist, kann das Entitätsobjekt wieder in eine BizTalk-Nachricht serialisiert werden. Sie können .NET-Klassen aus einem XML-Schema mit einem der folgenden Tools erstellen: XSD-Tool (.NET Framework 2.0) oder SVCUTIL (.NET Framework 3.0).

  • Aktivieren Sie eine Hilfskomponente aus einer Orchestrierung. Diese Technik hat gegenüber der Verwendung von distinguished Fields einen Vorteil. In der Tat liest eine Orchestrierung möglicherweise den XPath-Ausdruck aus einem Konfigurationsspeicher (Konfigurationsdatei, SSO-Konfigurationsspeicher, benutzerdefinierte Datenbank usw.), sodass Sie, wenn Sie den XPath-Ausdruck ändern müssen, kein Schema ändern und erneut bereitstellen müssen, wie es für höhergestufte Eigenschaften und distinguished Fields erforderlich ist. Das folgende Codebeispiel enthält ein Beispiel für eine Hilfskomponente. Die Komponente verwendet die XPathReader-Klasse, die von der BizTalk-Runtime bereitgestellt wird. Dadurch kann der Code den Dokumentdatenstrom lesen, bis der XPath-Ausdruck gefunden wird.

#region Copyright
//===
//Microsoft Windows Server AppFabric Customer Advisory Team (CAT)
//
// This sample is supplemental to the technical guidance published on the community
// blog.
//
// Author: Paolo Salvatori.
//===
// Copyright © 2010 Microsoft Corporation. All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
// EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. YOU BEAR THE RISK OF USING IT.
//===
#endregion
#region Using Directives
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Linq;
using System.Text;
using System.Globalization;
using Microsoft.XLANGs.BaseTypes;
using Microsoft.BizTalk.Streaming;
using Microsoft.BizTalk.XPath;
#endregion
namespace Microsoft.AppFabric.CAT.Samples.DuplexMEP.Helpers
{
public class XPathHelper
{
#region Private Constants
private const string MessageCannotBeNull = "[XPathReader] The message cannot be null.";
#endregion
#region Public Static Methods
public static string GetValue(XLANGMessage message, int partIndex, string xpath)
{
try
{
if (message == null)
{
throw new ApplicationException(MessageCannotBeNull);
}
using (Stream stream = message[partIndex].RetrieveAs(typeof(Stream)) as Stream)
{
XmlTextReader xmlTextReader = new XmlTextReader(stream);
XPathCollection xPathCollection = new XPathCollection();
XPathReader xPathReader = new XPathReader(xmlTextReader, xPathCollection);
xPathCollection.Add(xpath);
while (xPathReader.Read())
{
if (xPathReader.HasAttributes)
{
for (int i = 0; i < xPathReader.AttributeCount; i++)
{
xPathReader.MoveToAttribute(i);
if (xPathReader.Match(xPathCollection[0]))
{
return xPathReader.GetAttribute(i);
}
}
}
if (xPathReader.Match(xPathCollection[0]))
{
return xPathReader.ReadString();
}
}
}
}
finally
{
message.Dispose();
}
return string.Empty;
}
#endregion
}
}

Minimieren der Orchestrierungskomplexität zur Verbesserung der Leistung

Die Komplexität der Orchestrierungen wirkt sich erheblich auf die Leistung aus. Wenn die Orchestrierungskomplexität zunimmt, nimmt die Gesamtleistung ab. Orchestrierungen können in einer nahezu unendlichen Vielzahl von Szenarien verwendet werden, und jedes Szenario kann Orchestrierungen unterschiedlicher Komplexität umfassen. Vermeiden Sie komplexe Orchestrierungen, wenn möglich, zugunsten eines modularen Ansatzes. Anders ausgedrückt: Teilen Sie Ihre Geschäftslogik in mehrere wiederverwendbare Orchestrierungen auf.

Wenn Sie eine komplexe Orchestrierung implementieren müssen, definieren Sie Meldungen und Variablen nach Möglichkeit in innere Bereiche und nicht auf Stammebene. Diese Technik behält einen geringeren Speicherbedarf im Arbeitsspeicher für jede Orchestrierung bei, da Variablen und Nachrichten verworfen werden, wenn der Flow den Bereich verlässt, in dem die Variablen und Nachrichten definiert wurden. Dieser Ansatz ist besonders vorteilhaft, wenn Orchestrierungen an Persistenzpunkten in messageBox gespeichert werden.

Verwenden des Aufruforchestrierungs-Shapes im Vergleich zum Shape "Orchestrierung starten" zur Verbesserung der Leistung

Vermeiden Sie das Shape Orchestrierung starten , und verwenden Sie das Shape Aufruforchestrierung , um eine geschachtelte Orchestrierung auszuführen. Tatsächlich kann das Shape "Aufruforchestrierung " verwendet werden, um synchron eine Orchestrierung aufzurufen, auf die in einem anderen Projekt verwiesen wird. Dieser Ansatz ermöglicht die Wiederverwendung gängiger Orchestrierungsworkflowmuster in BizTalk-Projekten. Wenn Sie eine weitere geschachtelte Orchestrierung synchron mit der Aufruforchestrierungsform aufrufen, wartet die einschließende Orchestrierung auf den Abschluss der geschachtelten Orchestrierung, bevor sie fortgesetzt wird. Die geschachtelte Orchestrierung wird in dem thread ausgeführt, der die aufrufende Orchestrierung ausführt.

Die Form "Startorchestrierung " ähnelt der Form "Aufruforchestrierung ", aber in diesem Fall wird die geschachtelte Orchestrierung asynchron aufgerufen: Der Ablauf der Steuerung beim Aufrufen der Orchestrierung verläuft über den Aufruf hinaus, ohne darauf zu warten, dass die aufgerufene Orchestrierung ihre Arbeit beendet. Um diese Entkopplung zwischen dem Aufrufer und den aufgerufenen Orchestrierungen zu implementieren, wird die Startorchestrierung über die Veröffentlichung einer Nachricht in der BizTalk Messagebox implementiert. Diese Nachricht wird dann von einem prozessinternen BizTalk-Host instance verwendet, der die geschachtelte Orchestrierung ausführt. Verwenden Sie nach Möglichkeit die Aufruforchestrierung, insbesondere wenn die aufrufende Orchestrierung auf ein Ergebnis der geschachtelten Orchestrierung warten muss, um die Verarbeitung fortzusetzen. Weitere Informationen zur Verwendung des Aufruforchestrierungs-Shapes finden Sie in den folgenden Themen in der BizTalk Server 2010-Dokumentation:

Verwenden von XmlReader mit XLANGMessage im Vergleich zur Verwendung von XmlReader mit XmlDocument zur Verbesserung der Orchestrierungsleistung

Um die Orchestrierungsleistung für .NET-Methoden zu verbessern, die aus einer Orchestrierung aufgerufen werden, verwenden Sie XmlReader mit XLANGMessage, nicht XmlDocument. Im folgenden Codebeispiel wird diese Funktionalität veranschaulicht.

// As a general rule, use XmlReader with XLANGMessage, not XmlDocument.
// This is illustrated in the parameter passed into the following code.
// The XLANG/s compiler doesn't allow a return value of XmlReader
// so documents must be initially constructed as XmlDocument()
public static XmlDocument FromMsg(XLANGMessage old)
{
    //get at the data
    XmlDocument ret = new XmlDocument();

    try{
        XmlReader reader = (XmlReader)old[0].RetrieveAs(typeof(XmlReader));
        //construct new message from old
        //read property
        object msgid = old.GetPropertyValue(typeof(BTS.MessageID));
    }
    finally {
        // Call Dispose on the XLANGMessage object
        // because the message doesn't belong to the
        // .NET runtime - it belongs to the Messagebox database
        old.Dispose();
    }
    return ret;
}

Eine andere Methode wäre das Erstellen einer .NET-Klasse basierend auf dem Schema. Dies benötigt weniger Arbeitsspeicher als das Laden des Dokuments in ein XmlDocument-Objekt und bietet .NET-Entwicklern einfachen Zugriff auf die Schemaelemente. Um eine Klasse basierend auf einem BizTalk-Schema zu generieren, können Sie das in Visual Studio bereitgestellte xsd.exe-Tool verwenden. Wenn Sie beispielsweise xsd.exe <schema.xsd> /classes für ein einfaches Schema ausführen, das Felder namens ItemA, ItemB, ItemC enthält, wird die folgende Klasse erzeugt.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.1433
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

//
// This source code was auto-generated by xsd, Version=2.0.50727.42.
//

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://Schemas.MySchema")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://Schemas.MySchema", IsNullable=false)]
public partial class MySchemaRoot {

    private string itemAField;

    private string itemBField;

    private string itemCField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string ItemA {
        get {
            return this.itemAField;
        }
        set {
            this.itemAField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string ItemB {
        get {
            return this.itemBField;
        }
        set {
            this.itemBField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string ItemC {
        get {
            return this.itemCField;
        }
        set {
            this.itemCField = value;
        }
    }
}

Auf diese Klasse kann dann in Ihrer .NET-Assembly verwiesen werden, um auf die Nachrichtenelemente zuzugreifen, und das zurückgegebene Objekt kann direkt einer Nachricht zugewiesen werden. Im Folgenden finden Sie ein Beispiel für die Verwendung der oben generierten Klasse.

public static Root SetValues(Microsoft.XLANGs.BaseTypes.XLANGMessage msg)
{
   try
   {
   MySchemaRoot rootObj=(MySchemaRoot)msg[0].RetrieveAs(typeof(MySchemaRoot);
   rootObj.ItemA="value a";
   rootObj.ItemB="value b";
   rootObj.ItemC="value c";
   }
    finally {
        msg.Dispose();
            }

   return rootObj;
}

Mit dieser Technik können Sie bei der Verarbeitung von Nachrichten einen objektorientierten Ansatz verwenden. Diese Technik sollte in erster Linie bei relativ kleinen Nachrichten verwendet werden. Dies liegt daran, dass die gesamte Nachricht in den Arbeitsspeicher geladen wird, obwohl diese Technik deutlich weniger Arbeitsspeicher benötigt als beim Laden der Nachricht in ein XmlDocument-Objekt . Verwenden Sie bei der Verarbeitung größerer Nachrichten die XmlReader-Klasse zum Lesen von Nachrichten und die XmlWriter-Klasse zum Schreiben von Nachrichten. Bei Verwendung von XmlReader und XmlWriter ist die Nachricht in einem VirtualStream-Objekt enthalten. Wenn die Nachrichtengröße den für den Schwellenwert für große Nachrichten (Bytes) angegebenen Wert überschreitet, der auf der Konfigurationsseite der BizTalk-Gruppeneigenschaften verfügbar gemacht wird, wird die Nachricht in das Dateisystem geschrieben. Dies verringert die Gesamtleistung, vermeidet jedoch Ausnahmen außerhalb des Arbeitsspeichers.

Verbessern der Leistung durch Minimieren der Verwendung logischer Ports, die an physische Ports gebunden sind

Sie können die Leistung steigern, indem Sie die Verwendung logischer Ports minimieren, die an physische Ports gebunden sind, die die folgenden Adapter verwenden:

  • SQL Server, Oracle

  • WSE, HTTP, WCF

  • MSMQ, MQSeries

    In BizTalk Server 2010 können Sende- und Empfangspipelines direkt aus einer Orchestrierung mithilfe der XLANGPipelineManager-Klasse aufgerufen werden, die im Microsoft.XLANGs.Pipeline.dll enthalten ist. So kann die Verarbeitung von Pipelines von Ports zu Orchestrierungen verschoben werden; logische Ports in einer Orchestrierung können durch ein Ausdrucks-Shape ersetzt werden, das eine instance einer bestimmten .NET-Klasse aufruft (z. B. eine Datenzugriffskomponente mit ADO.NET). Bevor Sie diese Technik verwenden, sollten Sie sich bewusst sein, dass Sie, wenn Sie keine Adapter und physischen Ports verwenden, die Möglichkeit verlieren, deren Funktionen wie Batchverarbeitung, Wiederholungsversuche, deklarative Konfiguration und sekundäre Transporte zu nutzen.

Orchestrierungsentwurfsmuster

Mit der Orchestrierung Designer können Entwickler eine Vielzahl von Unternehmensintegrationsmustern implementieren. Einige gängige Muster sind Aggregator, Ausnahmebehandlung und Kompensation, Nachrichtenbroker, Scatter und Gather sowie Sequenzieller und Parallelkonvoi. Diese Muster können verwendet werden, um komplexe Lösungen für Die Unternehmensanwendungsintegration (Enterprise Application Integration, EAI), Service-Oriented Architecture (SOA) und Business Process Management (BPM) mit BizTalk Server zu entwickeln. Weitere Informationen zu Orchestrierungsentwurfsmustern finden Sie im Thema Implementieren von Entwurfsmustern in Orchestrierungen (https://go.microsoft.com/fwlink/?LinkId=140042) in der BizTalk Server-Dokumentation und muster und bewährte Methoden für die Unternehmensintegration (https://go.microsoft.com/fwlink/?LinkId=140043).

Geeignete Verwendung von .NET-Klassen in Orchestrierungen, um die Leistung zu maximieren

Im Allgemeinen können die in einer Orchestrierung verwendeten .NET-Klassen in zwei verschiedene Kategorien unterteilt werden:

  • Helfer und Dienste - Diese Klassen stellen allgemeine Dienste für Orchestrierungen wie Ablaufverfolgung, Fehlerbehandlung, Zwischenspeicherung und Serialisierung/Deserialisierung bereit. Die meisten dieser Klassen können als statische Klassen ohne internen Zustand und mehrere öffentliche statische Methoden implementiert werden. Dieser Ansatz vermeidet das Erstellen mehrerer Objekte derselben Klasse in verschiedenen Orchestrierungen, die gleichzeitig ausgeführt werden, wodurch der Arbeitsbereich von Hostprozessen reduziert und Arbeitsspeicher gespart wird. Eine klasse, die zustandslos ist, hilft, die Gesamtgröße des internen Zustands zu reduzieren, der serialisiert und im BizTalk MessageBox beibehalten werden muss, wenn eine Orchestrierung dehydriert wird.

  • Entitäten und Geschäftsobjekte : Sie können diese Klassen verwenden, um Entitäten wie Bestellungen, Bestellartikel und Kunden zu verwalten. Eine einzelne Orchestrierung kann intern mehrere Instanzen desselben Typs erstellen und verwalten. Diese Klassen sind in der Regel zustandsbehaftet und machen öffentliche Felder und/oder Eigenschaften zusammen mit Methoden verfügbar, um den internen Zustand des Objekts zu ändern. Instanzen dieser Klassen können dynamisch erstellt werden, indem eine XLANGMessage-Komponente mithilfe der XmlSerializer - oder DataContractSerializer-Klasse oder mithilfe der XLANGPart.RetrieveAs-Methode in ein .NET-Objekt deserialisiert wird. Sie sollten eine Orchestrierung mit nicht transaktionalen Bereichen so strukturieren, dass Instanzen von zustandsbehafteten Klassen so spät wie möglich erstellt und freigegeben werden, sobald sie nicht mehr benötigt werden. Dieser Ansatz reduziert den Arbeitsbereich von Hostprozessen und minimiert die Gesamtgröße des internen Zustands, der serialisiert und in der MessageBox-Datenbank beibehalten wird, wenn eine Orchestrierung dehydriert wird. Weitere Informationen zur Verwendung von Orchestrierungen in BizTalk Server finden Sie im Artikel häufig gestellte Fragen zu BizTalk Server Orchestrierungen (https://go.microsoft.com/fwlink/?LinkID=116886).

    Hinweis

    Obwohl dieser Artikel für BizTalk Server 2004 und BizTalk Server 2006 geschrieben wurde, gelten die vorgestellten Konzepte auch für BizTalk Server Orchestrierungen 2010.

Orchestrierungsausnahmehandlerblöcke

Wenn Sie Orchestrierungsausnahmehandlerblöcke verwenden, schließen Sie alle Orchestrierungsformen in einen oder mehrere Bereiche ein (möglichst nicht transaktionale Bereiche), und erstellen Sie mindestens die folgenden Ausnahmehandlerblöcke:

Überlegungen zur Verwendung von Zuordnungen in Orchestrierungen

Bei der Verwendung von Zuordnungen in Orchestrierungen gelten die folgenden Überlegungen:

  • Wenn Sie eine Zuordnung verwenden, um Eigenschaften zu extrahieren oder festzulegen, die mit Geschäftslogik in einer Orchestrierung verwendet werden, verwenden Sie distinguished Fields oder heraufgestufte Eigenschaften. Diese Vorgehensweise sollte befolgt werden, da beim Extrahieren oder Festlegen von Werten mit einer Zuordnung das Dokument in den Arbeitsspeicher geladen wird, wenn jedoch distinguished fields oder heraufgestufte Eigenschaften verwendet werden, greift die Orchestrierungs-Engine auf den Nachrichtenkontext zu und lädt das Dokument nicht in den Arbeitsspeicher.

  • Wenn Sie mehrere Felder mit einer Zuordnung in einem Feld zusammenfassen, können Sie zum Kumulieren des Resultsets gekennzeichnete Felder oder höher gestufte Eigenschaften mit einer Orchestrierungsvariablen verwenden.

Weitere Informationen

Optimieren der Leistung