Schritt 1: Erstellen eines Komponententests zum Übermitteln von Dokumenten an BizTalk Server
Computeranwendungsserver wie BizTalk Server sind für die Ausführung bestimmter Aufgaben im Auftrag von Benutzern konzipiert. Diese Aufgaben werden als Clientanforderungen initiiert, die an den Anwendungsserver als Nachrichten gesendet werden, die einem Standard entsprechen, den der Anwendungsserver versteht, über ein Protokoll, das der Anwendungsserver versteht. Beispielsweise können Clients die Verarbeitung von E-Mails initiieren, indem sie Internet-E-Mail-Nachrichten über das SMTP-Protokoll an einen E-Mail-Server senden. Ebenso verarbeiten Webserver HTML- oder ASP-Clientanforderungen, Datenbankserver verarbeiten CLIENT-SQL-Anforderungen und BizTalk Server können Clientnachrichten verarbeiten, die gemäß mehreren Branchennachrichtenstandards formatiert sind, indem zahlreiche Branchenstandardprotokolle verwendet werden. Die Workloadkapazität eines Anwendungsservers wird in der Regel anhand der Anzahl von Nachrichten gemessen, die der Anwendungsserver in einem bestimmten Zeitraum verarbeiten kann. Die Workloadkapazität von BizTalk Server wird ebenfalls als durchschnittliche Anzahl von "empfangenen Dokumenten pro Sekunde", "verarbeitete Dokumente pro Sekunde" und/oder "Orchestrierungen pro Sekunde" über einen längeren Zeitraum, z. B. einen arbeitsintensiven Arbeitstag oder sogar eine Arbeitswoche, gemessen. Die Visual Studio 2010-Auslastungstestfunktion kann ein Auslastungsprofil von bis zu Hunderten von Benutzern simulieren, die gleichzeitig auf eine Serveranwendung zugreifen. Diese Auslastungstestfunktion bietet Echtzeitmetriken für ausgewählte Leistungsindikatoren sowie die Möglichkeit, diese Metriken für zukünftige Analysen in einer Datenbank zu speichern. In diesem Dokument wird die Verwendung von Visual Studio Test-Projekten zum Testen der Auslastung einer BizTalk Server Anwendung beschrieben, einschließlich der Erstellung von Komponententests, der Erstellung von Auslastungstests und des Konfigurierens von Auslastungstests zum Erfassen von Leistungsindikatordaten, die erforderlich sind, um den maximalen nachhaltigen Durchsatz (MST) einer BizTalk Server-Anwendung zu ermitteln.
Erstellen eines Visual Studio-Komponententests zum Übermitteln von Dokumenten an BizTalk Server
Ein Visual Studio-Komponententest verweist auf den Namespace Microsoft.VisualStudio.TestTools.UnitTesting (https://go.microsoft.com/fwlink/?LinkID=132293), der mehrere Klassen bereitstellt, die Unterstützung für Komponententests bieten. Von besonderer Bedeutung ist, dass der UnitTesting -Namespace (https://go.microsoft.com/fwlink/?LinkID=132293) die Microsoft.VisualStudio.TestTools.UnitTesting.TestContext ()-Klasse zumhttps://go.microsoft.com/fwlink/?LinkID=208233 Speichern von Informationen enthält, die für Komponententests bereitgestellt werden, und die Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute (https://go.microsoft.com/fwlink/?LinkID=208235)-Klasse wird verwendet, um Testmethoden zu definieren. Für Auslastungstests BizTalk Server sollten Testmethoden die zu ladende Nachricht und den Endpunkt/die URL angeben, an die die Nachricht gesendet werden soll. Der Endpunkt/die URL dient dann als Nachrichteneinstiegspunkt in BizTalk Server, wenn ein entsprechender BizTalk-Empfangsspeicherort erstellt wird.
Zur Veranschaulichung beschreibt der Beispielcode in diesem Thema Testmethoden, die die System.ServiceModel.ChannelFactory(TChannel) (https://go.microsoft.com/fwlink/?LinkID=208238)-Klasse verwenden, um Nachrichten an Dienstendpunkte zu senden, die den WCF net.tcp-Endpunkt verwenden und vom BizTalk-WCF-Custom-Empfangsadapter überwacht werden. Dienstendpunkte für Testnachrichten werden in der Anwendungskonfigurationsdatei (app.config) des Testprojekts definiert.
Weitere Informationen zu Visual Studio-Komponententests finden Sie unter Anatomie eines Komponententests (https://go.microsoft.com/fwlink/?LinkID=208232).
Führen Sie die Schritte in den folgenden Abschnitten aus, um ein Testprojekt mit einem Komponententest zu erstellen, um Dokumente an einen oder mehrere BizTalk Server Computer zu übermitteln. Diese Schritte wurden mit Visual Studio 2010 Ultimate Edition abgeschlossen.
Festlegen von Visual Studio 2010-Testprojektoptionen
Starten Sie Visual Studio 2010 Ultimate Edition. Klicken Sie auf Start, zeigen Sie auf Alle Programme, zeigen Sie auf Microsoft Visual Studio 2010 , und klicken Sie dann auf Microsoft Visual Studio 2010.
Klicken Sie in Visual Studio 2010 auf Extras und dann auf Optionen , um das Dialogfeld Optionen anzuzeigen.
Klicken Sie, um Test Tools zu erweitern, und klicken Sie dann auf Projekt testen, um Optionen zum Erstellen neuer Testprojekte anzuzeigen.
Legen Sie die Standardtestprojektsprache aufVisual C#-Testprojekt fest.
Unter der Option Wählen Sie die Dateien aus, die jedem neuen Testprojekt hinzugefügt werden, standardmäßig: Wählen Sie Visual C#-Testprojekt aus, und deaktivieren Sie alle Testtypen für Visual C#-Testprojekte mit Ausnahme von Komponententest.
Klicken Sie auf OK, um das Dialogfeld Optionen zu schließen.
Erstellen einer neuen Visual Studio 2010-Projektmappe mit einem Testprojekt
Erstellen Sie den Ordner C:\Projects auf dem Visual Studio 2010 Ultimate-Computer.
Klicken Sie in Visual Studio 2010 auf Datei, zeigen Sie auf Neu, und klicken Sie auf Projekt , um das Dialogfeld Neues Projekt anzuzeigen.
Klicken Sie unter Installierte Vorlagen auf Visual C#, und klicken Sie auf Testen.
Geben Sie unten im Dialogfeld Neues Projekt die folgenden Optionen an:
Name:BTSLoad
Location:C:\Projects\
Lösungsname:LoadTest
Stellen Sie sicher, dass die Option Verzeichnis für Projektmappe erstellen aktiviert ist, und klicken Sie dann auf OK.
Fügen Sie dem BTSLoad-Projekt einen Ordner hinzu. Dieser Ordner enthält Testnachrichten, die an BizTalk Server übermittelt werden sollen. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das BTSLoad-Projekt, zeigen Sie auf Hinzufügen, und klicken Sie auf Neuer Ordner. Ein Ordnersymbol mit dem hervorgehobenen Text NewFolder1 wird unter dem BTSLoad-Projekt angezeigt. Geben Sie TestMessages ein, um den hervorgehobenen Text zu ändern, und drücken Sie die EINGABETASTE , um den Ordner C:\Projects\LoadTest\BTSLoad\TestMessages zu erstellen.
Aktualisieren sie den Code im Testprojekt, und fügen Sie dem Testprojekt eine Anwendungskonfigurationsdatei hinzu.
Klicken Sie in Projektmappen-Explorer, um UnitTest1.cs auszuwählen, und ersetzen Sie den vorhandenen Code durch die folgende Beispielcodeliste:
#region Using Directives using System; using System.IO; using System.Diagnostics; using System.Text; using System.Configuration; using System.Collections.Generic; using System.Linq; using System.Xml; using System.ServiceModel; using System.ServiceModel.Channels; using Microsoft.VisualStudio.TestTools.UnitTesting; #endregion namespace Microsoft.BizTalk.Samples { [TestClass] public class BTSLoadTest { #region Constants private const int MaxBufferSize = 2097152; private const string Source = "BTS Load Test"; private const string Star = "*"; private const string TestMessageFolderParameter = "testMessageFolder"; private const string TestMessageFolderDefault = @"C:\Projects\LoadTest\BTSLoad\TestMessages"; private const string TestMessageFolderFormat = @"Test Message Folder = {0}"; private const string TestXmlDocument = "testxmldocument.xml"; #endregion #region Private Instance Fields private TestContext testContextInstance; #endregion #region Private ThreadStatic Fields [ThreadStatic] private static ChannelFactory<IRequestChannel> channelFactory; [ThreadStatic] private static IRequestChannel channel = null; [ThreadStatic] private static byte[] buffer = null; #endregion #region Private Static Fields private static string testMessageFolder = null; #endregion #region Public Instance Constructor public BTSLoadTest() { } #endregion #region Public Static Constructor static BTSLoadTest() { try { testMessageFolder = ConfigurationManager.AppSettings[TestMessageFolderParameter]; if (string.IsNullOrEmpty(testMessageFolder)) { testMessageFolder = TestMessageFolderDefault; } } catch (Exception ex) { Trace.WriteLine(ex.Message); EventLog.WriteEntry(Source, ex.Message, EventLogEntryType.Error); } } #endregion #region Public Properties /// <summary> ///Gets or sets the test context which provides ///information about and functionality for the current test run. ///</summary> public TestContext TestContext { get { return testContextInstance; } set { testContextInstance = value; } } #endregion #region Test Methods [TestMethod] public void BTSMessaging() { InvokeBizTalkReceiveLocation("BTSMessagingEP", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } [TestMethod] public void BTSMessaging2() { InvokeBizTalkReceiveLocation("BTSMessagingEP2", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } [TestMethod] public void BTSOrchestration() { InvokeBizTalkReceiveLocation("BTSOrchestrationEP", testMessageFolder, TestXmlDocument, MessageVersion.Default, SessionMode.Allowed); } #endregion #region Helper Methods public void InvokeBizTalkReceiveLocation(string endpointConfigurationName, string requestMessageFolder, string requestMessageName, MessageVersion messageVersion, SessionMode sessionMode) { XmlTextReader xmlTextReader = null; Message requestMessage = null; Message responseMessage = null; try { if (channel == null || channel.State != CommunicationState.Opened) { channelFactory = new ChannelFactory<IRequestChannel>(endpointConfigurationName); channelFactory.Endpoint.Contract.SessionMode = sessionMode; channel = channelFactory.CreateChannel(); } if (buffer == null) { string path = Path.Combine(requestMessageFolder, requestMessageName); string message; using (StreamReader reader = new StreamReader(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))) { message = reader.ReadToEnd(); } buffer = Encoding.UTF8.GetBytes(message); } MemoryStream stream = new MemoryStream(buffer); xmlTextReader = new XmlTextReader(stream); requestMessage = Message.CreateMessage(messageVersion, Star, xmlTextReader); TestContext.BeginTimer(requestMessageName); responseMessage = channel.Request(requestMessage); } catch (FaultException ex) { HandleException(ex); throw; } catch (CommunicationException ex) { HandleException(ex); throw; } catch (TimeoutException ex) { HandleException(ex); throw; } catch (Exception ex) { HandleException(ex); throw; } finally { TestContext.EndTimer(requestMessageName); CloseObjects(xmlTextReader, requestMessage, responseMessage); } } private void HandleException(Exception ex) { try { Trace.WriteLine(ex.Message); EventLog.WriteEntry(Source, ex.Message, EventLogEntryType.Error); } catch (Exception) { } } private void CloseObjects(XmlTextReader xmlTextReader, Message requestMessage, Message responseMessage) { try { if (xmlTextReader != null) { xmlTextReader.Close(); } if (requestMessage != null) { requestMessage.Close(); } if (responseMessage != null) { responseMessage.Close(); } } catch (Exception) { } } #endregion } }
Fügen Sie dem Testprojekt eine Anwendungskonfigurationsdatei hinzu:
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt BTSLoad, zeigen Sie auf Hinzufügen, und klicken Sie auf Neues Element.
Klicken Sie im Dialogfeld Neues Element hinzufügen unter Installierte Vorlagen auf Allgemein.
Klicken Sie in der Liste der angezeigten Elemente auf Anwendungskonfigurationsdatei , und klicken Sie dann auf Hinzufügen.
Wählen Sie in Projektmappen-Explorer die datei app.config aus, und ersetzen Sie den Inhalt der app.config-Datei durch die folgende Beispielcodeliste:
Wichtig
Für jeden in dieser Datei definierten Clientendpunkt ist BizTalk Server Computer ein Platzhalter für den tatsächlichen Namen der BizTalk Server Computer, für die Sie Auslastungstests durchführen.
<configuration> <system.serviceModel> <!-- Bindings used by client endpoints --> <bindings> <netTcpBinding> <binding name="netTcpBinding" closeTimeout="01:10:00" openTimeout="01:10:00" receiveTimeout="01:10:00" sendTimeout="01:10:00" transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions" hostNameComparisonMode="StrongWildcard" listenBacklog="100" maxBufferPoolSize="1048576" maxBufferSize="10485760" maxConnections="400" maxReceivedMessageSize="10485760"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"> <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" /> <message clientCredentialType="Windows" /> </security> </binding> </netTcpBinding> </bindings> <client> <!-- Client endpoints used to exchange messages with WCF Receive Locations --> <!-- BTSMessagingEP --> <endpoint address="net.tcp://BizTalk Server Computer:8123/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSMessagingEP" /> <endpoint address="net.tcp://BizTalk Server Computer:8123/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSMessagingEP" /> <!-- BTSOrchestrationEP --> <endpoint address="net.tcp://BizTalk Server Computer:8122/btsloadtest" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="System.ServiceModel.Channels.IRequestChannel" name="BTSOrchestrationEP" /> </client> </system.serviceModel> <appSettings> <!-- Folder containing test messages --> <add key="testMessageFolder" value="C:\Projects\LoadTest\BTSLoad\TestMessages" /> <add key="ClientSettingsProvider.ServiceUri" value="" /> </appSettings> </configuration>
Klicken Sie in Visual Studio 2010 auf das Menü Datei , und klicken Sie dann auf Alle speichern.
Hinzufügen einer Testnachricht zum Projekt
Für die Zwecke dieses Beispiels werden BizTalk Server Empfangsspeicherorte und Sendeports für die Verwendung von Passthrough-Pipelines konfiguriert und führen keine Dokumentvalidierung durch. Führen Sie die folgenden Schritte aus, um dem Projekt eine Testmeldung hinzuzufügen:
Starten Sie den Editor. Klicken Sie auf Start, klicken Sie auf Ausführen , und geben Sie Editor in das Dialogfeld Ausführen ein.
Kopieren Sie den folgenden Text in Editor, und speichern Sie sie als "C:\Projects\LoadTest\BTSLoad\TestMessages\TestXmlDocument.xml".
<BTSLoadTest xmlns="http://Microsoft.BizTalk.Samples.BTSLoadTest"> <MessageText> This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. This is sample message text. </MessageText> </BTSLoadTest>
Schließen Sie den Editor.
Wichtig
Diese Datei muss unter Verwendung desselben Dateinamens auf jedem Load Test Agent-Computer im gleichen Pfad gespeichert werden, wenn mehrere Auslastungstest-Agent-Computer für Auslastungstests verwendet werden.
Hinzufügen der erforderlichen Verweise zum Projekt und Erstellen des Testprojekts
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Verweise für das BTSLoad-Projekt, und klicken Sie dann auf Verweis hinzufügen.
Klicken Sie im Dialogfeld Verweis hinzufügen auf die Registerkarte .NET , und wählen Sie mit der Kombination STRG+Klick Tastatur/Maus gleichzeitig die folgenden .NET-Namespaces aus:
System.Configuration
System.Runtime.Serialization
System.ServiceModel.Channels
System.ServiceModel
System.Web.Extensions
System.Xml
Nachdem Sie die Namespaces ausgewählt haben, klicken Sie auf OK , um diese Assemblys als Verweise auf das BTSLoad-Testprojekt hinzuzufügen.
Klicken Sie mit der rechten Maustaste auf das BTSLoad-Projekt , und klicken Sie dann auf Erstellen , um das Projekt in die BTSLoad-Assembly zu kompilieren.