Behandeln von Betriebsproblemen mit dem SQL-Adapter
In diesem Abschnitt wird die Verwendung von Problembehandlungstechniken erläutert, um Betriebsfehler zu beheben, die bei der Verwendung des Microsoft BizTalk-Adapters für SQL Server auftreten können.
Aktivieren der Ablaufverfolgung
Sie müssen die Ablaufverfolgung zwischen dem Adapter, dem WCF LOB Adapter SDK und SQL Server aktivieren, um weitere Informationen zu Problemen zu sammeln, die bei der Verwendung des SQL-Adapters auftreten. Weitere Informationen zur Ablaufverfolgungsunterstützung im SQL-Adapter finden Sie unter Diagnoseablaufverfolgung und Nachrichtenprotokollierung im SQL-Adapter.
Bekannte Probleme
Im Folgenden finden Sie die häufigsten Fehler, die bei der Verwendung des SQL-Adapters auftreten können, sowie deren wahrscheinliche Ursache und Auflösung.
Fehler beim Laden der Adapterbindungen
Problem
Wenn Sie versuchen, das Visual Studio-Plug-In "Adapterdienstverweis hinzufügen" oder das BizTalk-Projekt-Add-In "Adapterdienst nutzen" zu starten, wird die folgende Fehlermeldung angezeigt:
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
Ursache
Wenn Sie versuchen, das Add Adapter Service Reference Plug-In oder das Add-In Adapter Service Nutzen zu starten, lädt WCF die Adapterbindungen für alle installierten Adapter. Die Adapterbindungen wiederum sind von der spezifischen Clientsoftware für die Unternehmensanwendung abhängig. Dieses Problem kann auftreten, wenn Sie eine Typische oder vollständige Installation des Adapters durchgeführt haben, bei der alle im BizTalk-Adapterpaket enthaltenen Adapter installiert werden. Die Branchenclientbibliotheken werden jedoch möglicherweise nur für eine Unternehmensanwendung installiert. Infolgedessen kann die GUI die Bindungen für die anderen Adapter nicht laden.
Auflösung
Stellen Sie sicher, dass Sie eine benutzerdefinierte Installation der Adapter durchführen, um nur den adapter zu installieren, den Sie benötigen.
Der SQL-Adapter wird nicht in der Liste der Adapter in BizTalk Server Verwaltungskonsole angezeigt.
Problem
Im Gegensatz zur früheren Version der mit BizTalk Server gelieferten Adapter wird der mit dem BizTalk Adapter Pack gelieferte SQL-Adapter nicht in der Liste der Adapter in der BizTalk Server-Verwaltungskonsole angezeigt.
Ursache
Der neueste SQL-Adapter ist eine benutzerdefinierte WCF-Bindung. Obwohl die BizTalk Server-Verwaltungskonsole den WCF-Custom-Adapter anzeigt, werden die benutzerdefinierten WCF-Bindungen nicht angezeigt, und daher wird der WCF-basierte SQL-Adapter nicht angezeigt.
Auflösung
Sie können den SQL-Adapter explizit zur BizTalk Server-Verwaltungskonsole hinzufügen, indem Sie die unter Hinzufügen des SQL-Adapters zu BizTalk Server Verwaltungskonsole beschriebenen Schritte ausführen.
Fehler beim Ausführen von Vorgängen in einer SQL Server Datenbank
Problem
Der Adapter gibt den folgenden Fehler an, wenn ein Vorgang für eine SQL Server-Datenbank mithilfe von BizTalk Server ausgeführt wird.
Für BizTalk Server
System.ArgumentNullException: Value cannot be null.
Ursache
Die WCF-Aktion für die Nachricht ist nicht angegeben. WCF erfordert, dass für jeden Vorgang eine SOAP-Aktion angegeben wird, die den Adapter über den Vorgang informiert, der für die LOB-Anwendung ausgeführt werden soll.
Auflösung
Geben Sie die SOAP-Aktion im Sendeport oder als Nachrichtenkontexteigenschaft in einer BizTalk-Orchestrierung an. Anweisungen finden Sie unter Konfigurieren der SOAP-Aktion für den SQL-Adapter. Eine Liste der Aktionen für jeden Vorgang finden Sie unter Nachrichten und Nachrichtenschemas .
InvalidOperationException mit ErrorCode=5 beim Ausführen von FILESTREAM-Vorgängen
Problem
Beim Ausführen von FILESTREAM-Vorgängen mit dem SQL-Adapter wird der folgende Fehler angezeigt.
System.InvalidOperationException: OpenSqlFileStream returned error.
ErrorCode:5
Ursache
Möglicherweise haben Sie Datenbankanmeldeinformationen angegeben, um eine Verbindung mit der SQL Server Datenbank herzustellen. Zum Ausführen von FILESTREAM-Vorgängen müssen Sie immer die Windows-Authentifizierung verwenden. Der Fehlercode "5" gibt an, dass der Zugriff aufgrund falscher Anmeldeinformationen verweigert wird. Weitere Informationen zu den verschiedenen Fehlercodes finden Sie unter Systemfehlercodes (0-499).
Auflösung
Verwenden Sie die Windows-Authentifizierung, um eine Verbindung mit der SQL Server-Datenbank herzustellen. In BizTalk Server Verwaltungskonsole können Sie dies tun, indem Sie die Felder Benutzername und Kennwort im Dialogfeld WCF-Custom- oder WCF-SQL-Portkonfiguration leer lassen.
Der Abfragevorgang gibt keine Nachrichten zurück, auch wenn gültige Anweisungen für PollingStatement und PolledDataAvailableStatement angegeben sind.
Problem
Auch wenn gültige Werte für die Eigenschaften PollingStatement und PolledDataAvailableStatement angegeben werden, empfängt der Adapter keine Abrufmeldung von SQL Server.
Ursache
Überprüfen Sie, ob eine andere Transaktion eine Sperre für die Tabelle genommen hat, die der Adapter abruft.
Auflösung
Wenn Sie eine Tabelle abfragen möchten, die im Rahmen einer anderen Transaktion aktualisiert wird, können Sie den Parameter "with (nolock)" als Teil der Abfrage verwenden, die für die PolledDataAvailableStatement-Bindungseigenschaft angegeben ist, um sicherzustellen, dass Daten zurückgegeben werden, auch wenn von der anderen Transaktion eine Sperre verhängt wird. Weitere Informationen finden Sie unter SQL-Sperren in der Datenbank-Engine.
Mit BizTalk Server kann der Adapter große Datenmengen in einem einzelnen Vorgang nicht einfügen, aktualisieren oder löschen.
Problem
Der SQL-Adapter kann keine großen Datenmengen in einem einzelnen Vorgang mithilfe von BizTalk Server einfügen, aktualisieren oder löschen.
Ursache
Das Einfügen, Aktualisieren oder Löschen großer Datenmengen kann einige Zeit in Anspruch nehmen, und für den SQL-Adapter oder die Transaktion, in der der Vorgang ausgeführt wird, kann ein Timeout auftreten.
Auflösung
Für BizTalk Server
Geben Sie das Timeout für den WCF-Adapter im machine.config an. Navigieren Sie zur datei machine.config unter <Systemlaufwerk>:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG, und fügen Sie den folgenden Auszug hinzu.
<configuration> <system.transactions> <machineSettings maxTimeout="02:00:00" /> </system.transactions> </configuration>
Mit dieser Einstellung wird das WCF-Adaptertimeout auf 2 Stunden festgelegt.
Geben Sie die Timeouteinstellungen für MSDTC-Transaktionen im machine.config an. Navigieren Sie zur datei machine.config unter <Systemlaufwerk>:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG, und fügen Sie den folgenden Auszug hinzu.
<system.transactions> <defaultSettings distributedTransactionManagerName="<computer_name>" timeout="02:00:00"/> </system.transactions>
Mit dieser Einstellung wird das MSDTC-Timeout auf 2 Stunden festgelegt. Der Standardwert für das MSDTC-Timeout beträgt 10 Minuten.
Wichtig
Sie müssen diese Änderung auf den Computern vornehmen, auf denen der Adapterclient und SQL Server ausgeführt wird. Ersetzen Sie <im Auszug computer_name> durch den Namen des Computers, auf dem der Adapterclient und SQL Server ausgeführt wird.
Legen Sie die SendTimeout-Bindungseigenschaft für den SQL-Adapter auf einen ziemlich großen Wert fest. Anweisungen zum Festlegen der Bindungseigenschaften finden Sie unter Konfigurieren der Bindungseigenschaften für den SQL-Adapter.
Die vollständige Schemaüberprüfung in BizTalk Server schlägt für Antwortnachrichten fehl, die DataSet enthalten
Problem
Bei Vorgängen, die eine Antwortnachricht zurückgeben, die ein DataSet enthält, z. B. ExecuteReader, schlägt die vollständige Schemaüberprüfung in BizTalk Server fehl.
Auflösung
Es wird empfohlen, keine vollständige Schemaüberprüfung für Antwortnachrichten durchzuführen, die ein Dataset enthalten. Sie können stattdessen auch die folgenden Schritte durchführen.
Führen Sie den Vorgang aus, sobald die Antwortnachricht mit dem Schema zurückgegeben wird.
Kopieren Sie das Schema aus der Antwortnachricht in eine XSD-Datei, und fügen Sie diese Datei Ihrem BizTalk-Projekt hinzu.
Verwenden Sie eine xpath-Abfrage in Ihrer Orchestrierung, um die Daten aus der Antwortnachricht zu extrahieren.
Fehler mit RootNode TypeName in BizTalk-Projekten
Problem
Wenn in einem BizTalk-Projekt in Visual Studio die schemas, die aus dem Add-In "Adapterdienst nutzen" generiert wurden, ungültige Zeichen oder reservierte Wörter für die RootNode TypeName-Eigenschaft enthalten, tritt beim Kompilieren des Projekts der folgende Fehler auf:
Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).
Auflösung
Klicken Sie mit der rechten Maustaste auf den knoten, auf den im Fehler verwiesen wird, und wählen Sie Eigenschaften aus.
Entfernen Sie für die RootNode TypeName-Eigenschaft alle ungültigen Zeichen oder reservierten Wörter, z. B. Punkt (.).
Der Adapter kann keine Metadaten einer stark typisierten gespeicherten Prozedur mit temporären Tabellen generieren.
Problem
Der Adapter kann keine Metadaten für stark typisierte gespeicherte Prozeduren generieren, die temporäre Tabellen in ihrer Definition enthalten. Der Adapter gibt die folgende Ausnahme an.
Microsoft.ServiceModel.Channels.Common.MetadataException:
Retrieval of Operation Metadata has failed while building WSDL at 'TypedProcedure/<schema>/<stored_procedure_name>' --->
System.Data.SqlClient.SqlException: Invalid object name '<temp_table_name>'.
Auflösung
Der SQL-Adapter unterstützt das Generieren von Metadaten für stark typisierte gespeicherte Prozeduren, die temporäre Tabellen in ihrer Definition enthalten. Stattdessen sollten Sie Metadaten für dieselbe Prozedur unter dem Knoten Prozeduren generieren, während Sie das Add-In Adapter Service Reference Plug-In oder Consume Adapter Service Add-In verwenden.
Warnung zur ungültigen Bindung bei Verwendung des Adapters in Visual Studio
Problem
Wenn Sie mit dem Adapter eine Anwendung in Visual Studio erstellen und die vom Adapter generierte Konfigurationsdatei (app.config) öffnen, wird eine Warnung ähnlich der folgenden angezeigt:
The element 'bindings' has invalid child element 'sqlBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
Ursache
Diese Warnung wird angezeigt, da die SQL-Adapterbindung ( ) keine Standardbindung ist, sqlBinding
die mit Windows Communication Foundation (WCF) ausgeliefert wird.
Auflösung
Sie können diese Warnung problemlos ignorieren.
BizTalk Server löst eine Ausnahme aus, wenn Sie mehrere Benachrichtigungsschemas in derselben Anwendung oder das Benachrichtigungsschema für mehrere Anwendungen auf demselben Host verwenden.
Problem
BizTalk Server löst eine XLANG-Ausnahme oder eine Ausnahme aus, die besagt, dass die Anwendung die Dokumentspezifikation nicht finden kann, da mehrere Schemas mit dem Nachrichtentyp übereinstimmen.
Ursache
Dies geschieht aufgrund einer der folgenden:
Sie haben mehrere Benachrichtigungsschemas in einem BizTalk Server-Projekt generiert, es in einer BizTalk Server-Anwendung bereitgestellt und dann die Anwendung ausgeführt, um Benachrichtigungen aus der SQL Server-Datenbank zu empfangen. Da die Benachrichtigungsschemas häufig vorkommen, besteht ein Konflikt zwischen den Schemas, die in der BizTalk Server-Anwendung bereitgestellt werden.
Bei mehreren Projekten haben Sie ein Benachrichtigungsschema für jedes der BizTalk Server Projekte generiert, jedes Projekt in einer separaten BizTalk Server Anwendung auf demselben Host bereitgestellt und dann eine Anwendung oder Anwendungen ausgeführt, um Benachrichtigungen aus der SQL Server-Datenbank zu empfangen. Da auf die Schemas und Assemblys für alle Anwendungen in BizTalk Server zugegriffen werden kann, besteht ein Konflikt zwischen den allgemeinen Schemas, die unter verschiedenen BizTalk Server Anwendungen und Assemblys bereitgestellt werden.
Auflösung
Verwenden Sie eine einzelne Benachrichtigungsschemadatei für eine BizTalk Server Anwendung. Wenn Sie das Benachrichtigungsschema in mehreren BizTalk Server Anwendungen auf demselben Host verwenden müssen, erstellen Sie eine Anwendung, die ein einzelnes Benachrichtigungsschema enthält, und verwenden Sie dann das Benachrichtigungsschema aus allen anderen Anwendungen in BizTalk Server.
Adapterclient löst eine Ausnahme beim Ausführen eines Vorgangs aus, nachdem die Konnektivität zwischen dem Adapterclient und der SQL Server Datenbank wiederhergestellt wurde.
Problem
Der Adapterclient löst die folgende Ausnahme beim Ausführen eines Vorgangs für die SQL Server-Datenbank aus:
{System.Data.Common.DbException} = {"A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}
Ursache
Während der Ausführung eines Vorgangs verwendet der Adapter die Verbindung aus dem SQL-ADO.NET-Verbindungspool, um eine Verbindung mit der SQL Server Datenbank herzustellen und den Vorgang auszuführen. Wenn zwischen dem Adapterclient und der SQL Server Datenbank ein kurzer Netzwerkausfall vorliegt oder die SQL Server Datenbank vorübergehend ausgefallen ist, werden alle Verbindungen im SQL-ADO.NET-Verbindungspool ungültig. Nachdem die Konnektivität wiederhergestellt wurde und Sie versuchen, einen Vorgang für die SQL Server-Datenbank auszuführen, verwendet der Adapter dieselben ungültigen Verbindungen aus dem SQL-ADO.NET-Verbindungspool, und daher löst der Adapterclient die Ausnahme aus.
Auflösung
Der Adapterclient sollte Wiederholungslogik in seiner Vorgangsausführung implementieren, wobei er die Ausnahme abfangen und die Wiederholungsanzahl des Vorgangs als "n+1" angeben soll, wobei "n" der für die MaxConnectionPoolSize-Bindungseigenschaft angegebene Wert ist. Dies bedeutet, dass der Adapterclient theoretisch den Vorgang wiederholen sollte, wenn im Verbindungspool eine "n" Anzahl von Verbindungen vorhanden ist, die ungültig gemacht wurden.
Um beispielsweise die Wiederholungsanzahl in BizTalk Server anzugeben, öffnen Sie das Dialogfeld Eigenschaften eines Sendeports in einer Anwendung, klicken Sie im linken Bereich des Dialogfelds auf Erweiterte Transportoptionen, und geben Sie im Bereich Transportoptionen einen Wert in der Liste Wiederholungsanzahl an.
Arbeitsspeicherauslastung und Threadanzahl erhöhen sich, wenn der Adapter in einem transaktionsgebundenen eingehenden Vorgang verwendet wird
Problem
Wenn bei einem transaktionsgebundenen eingehenden Vorgang, z. B. Polling, keine Daten in der abgefragten Tabelle verfügbar sind und der Adapter weiterhin abruft, kommt es über einen bestimmten Zeitraum zu einer Zunahme der Arbeitsspeicherauslastung und der Threadanzahl.
Ursache
Wenn in der abgefragten Tabelle keine Daten verfügbar sind, wird nach jedem Timeoutzyklus ein neuer Thread von Windows Communication Foundation (WCF) erstellt, um den Abrufvorgang fortzusetzen. Daher erhöhen sich die Threadanzahl und die Arbeitsspeicherauslastung über einen bestimmten Zeitraum. Wenn die abgefragte Tabelle jedoch einige Daten enthält, führt derselbe Thread weiterhin alle nachfolgenden Umfragen aus.
Auflösung
Es wird empfohlen, das ReceiveTimeout auf den maximal möglichen Wert festzulegen, der 24.20:31:23.6470000 (24 Tage) ist, sodass nur alle 24 Tage ein neuer Thread erstellt wird. Dadurch wird sichergestellt, dass die Arbeitsspeicherauslastung und die Threadanzahl nicht zu früh anwachsen.
Hinweis
Wenn SqlAdapterInboundTransactionBehavior festgelegt wurde, stellen Sie sicher, dass transactionTimeout auch auf den maximal möglichen Wert konfiguriert ist, der 24.20:31:23.6470000 (24 Tage) ist. Wenn Sie diese Problemumgehung verwenden, können Sie sqlAdapterInboundTransactionBehavior nur hinzufügen, wenn die Transaktionsisolationsstufe konfiguriert werden muss. Andernfalls empfiehlt es sich, dieses Verhalten zu entfernen.
Weitere Informationen zur ReceiveTimeout-Bindungseigenschaft finden Sie unter Informationen zum BizTalk-Adapter für SQL Server Adapterbindungseigenschaften. Anweisungen zum Angeben von Bindungseigenschaften finden Sie unter Konfigurieren der Bindungseigenschaften für den SQL-Adapter.
Hinweis
Wenn Sie den Adapter mit BizTalk Server verwenden, wirkt sich das Festlegen des Timeouts auf einen großen Wert nicht auf die Funktionalität des Adapters aus.