Files
biztalk-sap-environment-inv…/Dokumentation.md
T
admin d1e10920c9
Build und Test / build (push) Has been cancelled
Stabilize BizTalk inventory collection and diagnostics
2026-07-28 10:55:57 +02:00

449 lines
14 KiB
Markdown

# Technische Dokumentation: BEW BizTalk SAP Environment Inventory
## 1. Zielbild und Topologie
Das Tool erzeugt je Umgebung einen belastbaren Ist-Bericht der SAP-Adapterkonfiguration und der vollständigen BizTalk-Anwendungsliste.
```text
ACC
+-- 1 BizTalk Server 2020 <-- Tool lokal ausführen
+-- 1 SQL Server <-- BizTalk-Datenbanken
PROD
+-- 1 BizTalk Server 2020 <-- Tool lokal ausführen
+-- 1 SQL Server <-- BizTalk-Datenbanken
```
Es gibt in ACC und PROD jeweils keinen zweiten BizTalk-Knoten, der verglichen werden müsste. Die Berichte sind getrennt zu erzeugen und anschließend gegenüberzustellen.
Aufgabenbezug:
- SAP-Adapter-Verbindungsparameter dokumentieren
- vollständige BizTalk-Anwendungsliste statt einer unvollständigen bisherigen App-Liste erzeugen
- tatsächliche Zuordnung der SAP-Verbindungen zu BizTalk-Anwendungen herstellen
- ERP-/ISU-Receive- und Send-Hosts dokumentieren
- SNC-Konfiguration, Bibliotheken und Zertifikats-/PSE-Metadaten erfassen
- IDoc-Basistypen/Erweiterungen sowie WE20/WE21 als Nachweise adressieren
- DR-Abhängigkeit zur SAP-seitigen Umschaltung nach Frankfurt sichtbar machen
## 2. Architektur
```text
Administrative cmd.exe
|
+-- run-inventory.cmd ACC|PROD
|
+-- BizTalkSapEnvironmentInventory.exe
|
+-- SystemCollector
| +-- Windows WMI
| +-- BizTalk Registry
| +-- MSBTS_GroupSetting für Management SQL/DB
|
+-- BizTalkWmiCollector
| +-- ExplorerOM: vollständige Anwendungsliste
| +-- root\MicrosoftBizTalkServer
| +-- optionale Artefakte, Adapter, Hosts und Handler
| +-- optionaler SAP-Endpunkt-Fallback
|
+-- BindingExportCollector
| +-- BTSTask ExportBindings /GroupLevel
| +-- WCF-SAP und WCF-Custom/sapBinding
| +-- SAP-URI und CustomProps
| +-- Secret-Redaktion
|
+-- SapRuntimeCollector
| +-- Adapter Pack/NCo-Installationen
| +-- Runtime-Dateiversion und Architektur
| +-- SNC/PSE/Zertifikatsmetadaten
|
+-- DocxReportWriter
+-- Office Open XML
+-- atomare Ausgabe
```
Das Programm besitzt keine compile-time-Referenz auf eine
`Microsoft.BizTalk.*`-Assembly. Dadurch besteht das Deployment nur aus EXE,
Konfiguration, Startskript und Dokumentation. Die lokal mit den
BizTalk-Verwaltungskomponenten installierte
`Microsoft.BizTalk.ExplorerOM.dll` wird zur Laufzeit aus GAC beziehungsweise
Installationspfad geladen. Die übrige BizTalk-Integration erfolgt über WMI und
`BTSTask.exe`.
## 3. Datenquellen
### 3.1 System und Registry
Windows-Daten stammen aus `root\cimv2`. BizTalk-Installations- und Managementinformationen werden in beiden Registry-Ansichten unter folgenden Schlüsseln gesucht:
```text
HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0
HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Administration
```
Ermittelt werden unter anderem:
- Produktname, Version und Edition
- Installationspfad
- BizTalk Management SQL Server
- BizTalk Management Database
- Betriebssystem, Build und Prozessarchitektur
Kommandozeilenparameter überschreiben automatisch ermittelte Management-DB-Werte.
### 3.2 BizTalk-Gruppe und ExplorerOM
Die Management-Datenbank wird zunächst aus Registry und lokalem
`MSBTS_GroupSetting` ermittelt. Kommandozeilenparameter haben Vorrang. Die
verwendete WQL-Abfrage wird mit Laufzeit und Datensatzanzahl protokolliert:
```sql
SELECT Name,MgmtDbServerName,MgmtDbName FROM MSBTS_GroupSetting
```
Die vollständige Anwendungsliste wird anschließend über
`Microsoft.BizTalk.ExplorerOM.BtsCatalogExplorer` und integrierte
Windows-Authentifizierung aus der BizTalk Management Database gelesen. Es werden
keine ändernden ExplorerOM-Methoden aufgerufen. Die Connection String wird nicht
protokolliert.
Dieser Aufbau vermeidet die nicht verlässlich vorhandene WMI-Klasse
`MSBTS_Application`, die je nach Installation mit `Invalid class` abbrechen kann.
ExplorerOM-Assemblyname, Version und Dateipfad werden protokolliert. Wenn
`MSBTS_GroupSetting` nicht gelesen werden kann, darf das automatisch oder per
`--management-server`/`--management-database` ermittelte Datenbankziel weiterhin
für ExplorerOM verwendet werden.
### 3.3 Optionale BizTalk-WMI-Daten
Primärer Namespace:
```text
root\MicrosoftBizTalkServer
```
Optionale beziehungsweise versionsabhängige Artefaktklassen:
- `MSBTS_Orchestration`
- `MSBTS_SendPort`
- `MSBTS_SendPortGroup`
- `MSBTS_ReceivePort`
- `MSBTS_ReceiveLocation`
- `MSBTS_Assembly`
- `MSBTS_Schema`
- `MSBTS_Map`
- `MSBTS_Pipeline`
- `MSBTS_AdapterSetting`
- `MSBTS_ReceiveHandler`
- `MSBTS_SendHandler2` bzw. `MSBTS_SendHandler`
- `MSBTS_HostSetting`
- `MSBTS_HostInstance`
Eine fehlende optionale Klasse erzeugt einen Hinweis, verhindert aber nicht die
ExplorerOM-Anwendungsliste oder den Word-Bericht. Ist der gesamte BizTalk-WMI-
Namespace für diese Zusatzdaten nicht erreichbar, wird der WMI-Teil übersprungen;
die zuvor geladene Anwendungsliste bleibt erhalten.
Zum Schutz vor ungewöhnlich großen Artefaktmengen begrenzt `MaxArtifactDetailsPerType`
die aufgenommenen Detaildatensätze pro WMI-Klasse auf standardmäßig 5000. Die
Anwendungsliste selbst wird nicht begrenzt.
### 3.4 BTSTask-Gruppenbinding
Das Tool verwendet:
```cmd
BTSTask.exe ExportBindings ^
/GroupLevel ^
/Destination:"<temporäre Datei>" ^
/Server:"<Management SQL Server>" ^
/Database:"<Management Database>"
```
`/GroupLevel` ist entscheidend: Ohne diesen Parameter würde `BTSTask` nur die Default-Anwendung exportieren und die geforderte vollständige Port-/App-Zuordnung wäre nicht gewährleistet.
Die temporäre XML-Datei wird:
1. in einem eindeutigen Temp-Pfad erzeugt,
2. mit deaktivierter DTD-/External-Entity-Auflösung gelesen,
3. ausschließlich in sichere Berichtsmodelle überführt,
4. im `finally`-Block gelöscht.
Microsoft dokumentiert, dass Kennwörter beim Binding-Export entfernt werden. Zusätzlich redigiert das Tool sensitive Element-, Attribut- und URI-Werte.
### 3.5 Offline-Binding
Für Diagnose- oder Berechtigungsfälle kann ein vorhandener Export verarbeitet werden:
```cmd
BizTalkSapEnvironmentInventory.exe ^
--environment ACC ^
--binding-file C:\Temp\ACC-GroupBindings.xml
```
Die Datei wird nicht verändert.
## 4. SAP-Endpunkterkennung
Ein Endpunkt wird als SAP-relevant erkannt, wenn mindestens eines zutrifft:
- Adaptername enthält `SAP`
- Adresse beginnt mit `sap://`
- Binding Type enthält `sapBinding`
- Custom Properties enthalten `Microsoft.Adapters.SAP`
Dadurch werden sowohl dedizierte `WCF-SAP`-Ports als auch `WCF-Custom`-Ports mit SAP Custom Binding erkannt.
## 5. SAP-Verbindungsparameter
### 5.1 SAP-URI
Beispiel:
```text
sap://Client=100;lang=DE@A/sap.example.local/00
?GwHost=gateway.example.local
&GwServ=sapgw00
&ListenerProgramId=BIZTALK_ACC
```
Ausgewertete Parameter:
| Gruppe | Parameter |
| --- | --- |
| Login | `Client`, `Language` |
| Application Server | Host, System Number |
| Message Server | Host, R/3 System Name, Gruppe |
| Destination | Destination Name |
| Gateway | `GwHost`, `GwServ` |
| RFC Listener | `ListenerDest`, `ListenerGwHost`, `ListenerGwServ`, `ListenerProgramId` |
| Routing | `SAPROUTER` |
| Security | `UseSnc` |
### 5.2 Binding Properties
`TransportTypeData` und `ReceiveLocationTransportTypeData` enthalten bei WCF-Adaptern verschachtelte `CustomProps` und teilweise nochmals XML-kodierte Bindingkonfiguration. Der Parser verarbeitet diese Ebenen begrenzt rekursiv und erfasst unter anderem:
- `BindingType`
- `UseSnc`
- `SncLibrary`
- `SncPartnerName`
- `SncMyName`
- `SncQop`
- `AffiliateApplicationName`
- `UserName`
- `Action` und `ActionMapping`
Große Werte werden im Bericht begrenzt. Sensitive Werte werden vor Aufnahme in das Modell redigiert.
### 5.3 Anwendungszuordnung
Die Zuordnung erfolgt in dieser Reihenfolge:
1. `ApplicationName` im Gruppenbinding
2. gleichnamiger Send Port oder Receive Port aus WMI
3. keine Schätzung; stattdessen Finding
Damit wird sichtbar, welche der vollständigen BizTalk-Anwendungen tatsächlich SAP-Ports verwendet.
## 6. SAP NCo und Prozessarchitektur
Gesucht werden:
- installierter Microsoft BizTalk Adapter Pack/WCF LOB Adapter SDK
- SAP .NET Connector
- `sapnco.dll`
- `sapnco_utils.dll`
- SAP Cryptographic Library
- `sapgenpse.exe`
Für gefundene PE-Dateien werden Dateiversion, Produktversion, Änderungszeit und PE-Architektur dokumentiert. Dies unterstützt die Prüfung, ob der jeweilige 32-/64-Bit-BizTalk-Host zur installierten SAP-Laufzeit passt.
Die Erfassung durchsucht nur klar begrenzte Installations- und Konfigurationspfade bis zu einer Maximalebene. Es findet keine unbeschränkte Volltextsuche über alle Laufwerke statt.
## 7. SNC und Credential-Sicherheit
Der Security-Modus wird aus den Bindingparametern klassifiziert:
1. `UseSnc=true` → SAP SNC
2. SSO Affiliate Application vorhanden → Enterprise SSO
3. Benutzername vorhanden → SAP-Benutzer
4. sonst nicht eindeutig ableitbar
Dokumentiert werden dürfen:
- SAP-Benutzername oder SSO-Referenz
- SNC-Partner-/My-Name
- SNC-Bibliothek und QOP
- PSE-/Zertifikatspfad
- Fingerprint und Gültigkeit
- Vorhandensein eines privaten Schlüssels bei X.509-Zertifikaten
Nicht dokumentiert werden:
- Kennwörter
- PSE-Inhalte
- private Schlüssel
- Tokens
- entschlüsselbare Connection Strings
Rotation und Owner sind keine technischen Bindingeigenschaften. Sie bleiben als manueller Security-Nachweis offen.
## 8. IDoc, WE20 und WE21
### 8.1 Automatisch belegbare Indikatoren
Das Tool sucht nach SAP-/IDoc-Indikatoren in:
- Schema- und Assemblynamen
- Target Namespaces und Root Names
- WCF Actions
- SAP-Adapteroperationen
Dies kann IDoc-Basistypen wie beispielsweise `ORDERS05` sichtbar machen, ist aber kein Ersatz für eine SAP-seitige Bestandsaufnahme.
### 8.2 SAP-seitige Pflichtnachweise
Von SAP Basis beziehungsweise dem Fachteam beizustellen:
| Bereich | Benötigte Daten |
| --- | --- |
| WE20 | Partner, Nachrichtentyp, Basistyp, Erweiterung, Empfängerport, Verarbeitungsoptionen |
| WE21 | Portname, RFC-Destination, IDoc-Version, WE20-Zuordnung |
| RFC Destination | Typ, Zielsystem, Gateway, Program ID, Verbindungstest |
| IDoc | vollständige Liste der Basistypen und kundeneigenen Erweiterungen |
Das Tool markiert diese Punkte in jedem DOCX als offen, selbst wenn einzelne Namen aus dem BizTalk-Binding abgeleitet werden konnten.
## 9. Disaster Recovery
Der lokale BizTalk-Bericht zeigt die aktuell konfigurierten RFC-/Gateway-/Listenerwerte. Er kann nicht entscheiden, ob und wie die RFC-Destination im SAP-System auf Frankfurt umgeschaltet wird.
Das DR-Runbook muss mindestens enthalten:
1. Owner und Freigabe für die Umschaltung
2. betroffene RFC-Destinationen
3. Zielwerte in Frankfurt
4. SNC-PSE/Bibliothek und Identität am DR-Ziel
5. Reihenfolge BizTalk/SAP
6. Verbindungstest
7. Rückschaltung
8. Dokumentation des letzten Tests
## 10. Resilienz
- Collector-Isolation mit eigenem Status und Zeitmessung
- WMI nur lokal über `\\.\root\MicrosoftBizTalkServer`
- WMI-Timeout, WQL-, Laufzeit- und Datensatzprotokollierung
- vollständige Anwendungsliste über read-only ExplorerOM statt
`MSBTS_Application`
- dynamische ExplorerOM-Auflösung aus GAC und BizTalk-Installationspfad
- WMI-Zusatzdaten dürfen nach erfolgreicher ExplorerOM-Erfassung ausfallen
- Prozess-Timeout für `BTSTask`
- live gespiegelte, secret-bereinigte BTSTask-Ausgabe
- WMI-Fallback für SAP-Endpunkte
- Offline-Bindingmodus
- optionale WMI-Klassen stoppen den Lauf nicht
- begrenzte Dateisystemsuche
- Fehlerisolation bei Registry, Zertifikaten und Dateimetadaten
- XML-Parser ohne DTD/External Entities
- atomare DOCX-Ausgabe
- eindeutige Dateinamen mit Umgebung, Server und Zeitstempel
- Exitcode `1` bei unvollständigem Pflichtabschnitt
- vollständige Ausnahmeketten mit Typ, HRESULT, WMI-Status, inneren Ausnahmen
und Stacktrace auf Konsole und im Log
## 11. DOCX-Erzeugung ohne Office
Der Report Writer erzeugt ein standardkonformes Office-Open-XML-Paket mit:
```text
[Content_Types].xml
_rels/.rels
docProps/core.xml
docProps/app.xml
word/document.xml
word/styles.xml
word/_rels/document.xml.rels
```
Alle Texte werden über `XmlWriter` geschrieben. Dadurch werden Host-, Anwendungs- und Portnamen als Text behandelt und können kein XML-Markup einschleusen.
## 12. Lauf auf ACC und PROD
Auf jedem der beiden BizTalk Server:
1. Deployment in einen lokalen Ordner kopieren.
2. Administrative `cmd.exe` öffnen.
3. `BizTalkSapEnvironmentInventory.exe --self-test` ausführen.
4. Erfassung starten.
5. Exitcode prüfen.
6. Im Log `MSBTS_GroupSetting`, Datensatzanzahl und Management-Datenbankziel prüfen.
7. ExplorerOM-Assemblyname, Version und Pfad kontrollieren.
8. DOCX und Log gemeinsam kontrollieren.
9. Anwendungsliste gegen BizTalk Administration abgleichen.
10. SAP-Endpunkte und Hostzuordnung prüfen.
11. WE20-/WE21-/Credential-/DR-Findings an SAP Basis geben.
ACC:
```cmd
run-inventory.cmd ACC C:\BizTalk-Doku\ACC
```
PROD:
```cmd
run-inventory.cmd PROD C:\BizTalk-Doku\PROD
```
## 13. Build und Tests
Buildbaseline:
- klassisches MSBuild-Projekt
- .NET Framework 4.7.2
- C# 7.3
- Visual Studio 2019/MSBuild 16.x
- keine SDK-style-Projekte
- keine NuGet-Pakete
```cmd
scripts\build-release.cmd
scripts\package-release.cmd
```
Tests prüfen:
- Secret-Redaktion in XML und SAP-URI
- Parsing eines WCF-SAP-Gruppenbindings
- SAP-Client, Host und `UseSnc`
- Anwendungszuordnung
- Diagnose-Logging mit HRESULT und innerer Reflection-Ausnahme
- DOCX-Paketstruktur
- XML-Gültigkeit aller DOCX-Parts
- Ausschluss von Testkennwörtern
## 14. Bekannte Grenzen
- kein SAP-Login
- kein aktiver RFC-Ping
- keine direkte Abfrage von WE20, WE21 oder SM59
- keine Auflösung von Credential-Owner oder Rotation
- keine Garantie, dass Schemanamen alle verwendeten IDoc-Erweiterungen enthalten
- dynamisch zur Laufzeit konstruierte SAP-Adressen können im statischen Binding fehlen
- WMI-Klassen unterscheiden sich teilweise je BizTalk-Version/CU
- die lokal installierte ExplorerOM-Version muss zur lokalen BizTalk-Installation
passen
- lokaler Ist-Stand; ACC und PROD müssen getrennt ausgeführt werden
## 15. Referenzen
- Microsoft: BizTalk Server 2020 Hardware and Software Requirements
- Microsoft: `BTSTask ExportBindings`
- Microsoft: BizTalk Explorer Object Model
- Microsoft: BizTalk WMI Technical Reference
- Microsoft: WCF-SAP Port Configuration
- Microsoft: SAP System Connection URI
- Microsoft: Security between the SAP system and the adapter