221 lines
8.0 KiB
Markdown
221 lines
8.0 KiB
Markdown
# Technische Dokumentation: BEW BizTalk Application Catalog
|
|
|
|
## 1. Zielbild
|
|
|
|
Das Werkzeug erstellt je Umgebung eine eigenständige Microsoft-Excel-Arbeitsmappe mit der vollständigen Liste der auf dem lokalen BizTalk Server 2020 installierten Anwendungen und den wichtigsten zugeordneten Kernparametern.
|
|
|
|
```text
|
|
ACC
|
|
+-- 1 BizTalk Server 2020 / Windows Server 2019 <-- Tool lokal ausführen
|
|
+-- 1 SQL Server für die BizTalk-Datenbanken
|
|
|
|
PROD
|
|
+-- 1 BizTalk Server 2020 / Windows Server 2019 <-- Tool lokal ausführen
|
|
+-- 1 SQL Server für die BizTalk-Datenbanken
|
|
```
|
|
|
|
ACC und PROD werden getrennt inventarisiert. Da es pro Umgebung nur einen BizTalk-Knoten gibt, ist kein Node-Abgleich erforderlich.
|
|
|
|
## 2. Architektur
|
|
|
|
```text
|
|
Administrative cmd.exe
|
|
|
|
|
+-- run-inventory.cmd ACC|PROD
|
|
|
|
|
+-- BizTalkApplicationCatalog.exe
|
|
|
|
|
+-- SystemCollector
|
|
| +-- Win32_OperatingSystem
|
|
| +-- lokale BizTalk Registry
|
|
| +-- MSBTS_GroupSetting
|
|
|
|
|
+-- BizTalkWmiCollector
|
|
| +-- vollständige Anwendungsliste
|
|
| +-- Artefaktdetails
|
|
| +-- Hosts und Handler
|
|
| +-- Abdeckungsstatus pro Klasse
|
|
|
|
|
+-- XlsxReportWriter
|
|
+-- Office Open XML / ZIP
|
|
+-- Inline Strings, keine Shared-String-Abhängigkeit
|
|
+-- Filter, Freeze Panes, Styles
|
|
+-- atomarer Dateiaustausch
|
|
```
|
|
|
|
Die Anwendung referenziert keine `Microsoft.BizTalk.*`-Assembly. Die einzige BizTalk-Schnittstelle ist der lokal installierte WMI-Provider. Dadurch besteht das Deployment nur aus EXE, Konfiguration, Startskript und Dokumentation.
|
|
|
|
## 3. Toolchain und Kompatibilität
|
|
|
|
Die Build-Baseline ist absichtlich auf die BizTalk-2020-Umgebung ausgerichtet:
|
|
|
|
- Visual Studio 2019 / Solution Version 16
|
|
- MSBuild 16.x, insbesondere 16.11
|
|
- klassisches MSBuild-Projektformat mit `ToolsVersion="15.0"`
|
|
- .NET Framework 4.7.2
|
|
- C# 7.3
|
|
- keine SDK-Style-Projekte
|
|
- kein `PackageReference`
|
|
- keine `global.json`
|
|
- keine NuGet-Abhängigkeit
|
|
|
|
Damit wird nicht das installierte .NET SDK 8 oder neuer ausgewählt. Der bekannte Fehler „.NET SDK 8.x requires at least MSBuild 17.8.3“ kann bei dieser Solution nicht durch eine SDK-Auswahl entstehen.
|
|
|
|
## 4. Datenquellen
|
|
|
|
### 4.1 Pflichtquelle
|
|
|
|
`MSBTS_Application` liefert die Primärliste aller Anwendungen. Liefert diese Klasse keine Datensätze oder kann sie nicht gelesen werden, gilt der Pflichtabschnitt als fehlgeschlagen und der Prozess endet nach der dennoch versuchten XLSX-Erzeugung mit Exitcode `1`.
|
|
|
|
Aufgenommene Parameter:
|
|
|
|
- `Name` beziehungsweise `ApplicationName`
|
|
- `Description`
|
|
- `Status`
|
|
- `IsDefault`, soweit vom Provider geliefert
|
|
|
|
### 4.2 Optionale Artefaktklassen
|
|
|
|
| WMI-Klasse | Berichtstyp |
|
|
| --- | --- |
|
|
| `MSBTS_Orchestration` | Orchestrierung |
|
|
| `MSBTS_SendPort` | Send Port |
|
|
| `MSBTS_SendPortGroup` | Send Port Group |
|
|
| `MSBTS_ReceivePort` | Receive Port |
|
|
| `MSBTS_ReceiveLocation` | Receive Location |
|
|
| `MSBTS_Assembly` | Assembly |
|
|
| `MSBTS_Schema` | Schema |
|
|
| `MSBTS_Map` | Map |
|
|
| `MSBTS_Pipeline` | Pipeline |
|
|
|
|
Die WMI-Klassen können abhängig von Installation, Providerstand und Berechtigung unterschiedliche Properties anbieten. Deshalb fragt der Collector `SELECT *` ab und liest bekannte Properties defensiv. Eine nicht vorhandene Property wird leer gelassen und beendet die Klasse nicht.
|
|
|
|
Receive Ports werden vor Receive Locations gelesen. Fehlt an einer Receive Location die direkte `ApplicationName`, wird die Anwendung über `ReceivePortName` bestmöglich aufgelöst.
|
|
|
|
### 4.3 Hosts und Handler
|
|
|
|
- `MSBTS_HostSetting`
|
|
- `MSBTS_HostInstance`
|
|
- `MSBTS_ReceiveHandler`
|
|
- `MSBTS_SendHandler2`
|
|
- Fallback `MSBTS_SendHandler`
|
|
|
|
Erfasst werden Name, Server, Status, Hosttyp, Windows-Gruppe, 32-Bit-Kennzeichen, Trusted-Kennzeichen und Adaptername, soweit vorhanden.
|
|
|
|
### 4.4 Systeminformationen
|
|
|
|
- `Win32_OperatingSystem`
|
|
- `HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0`
|
|
- `HKLM\SOFTWARE\Microsoft\BizTalk Server\3.0\Administration`
|
|
- `MSBTS_GroupSetting`
|
|
|
|
Registry-Werte werden in 64- und 32-Bit-Ansicht gelesen. Kommandozeilenwerte für Management Server und Datenbank überschreiben ermittelte Werte.
|
|
|
|
## 5. Abdeckungsmodell
|
|
|
|
Jede abgefragte BizTalk-WMI-Klasse erzeugt einen Datensatz im Blatt `Abdeckung`:
|
|
|
|
| Status | Bedeutung |
|
|
| --- | --- |
|
|
| `Vollständig` | Abfrage erfolgreich; die angegebene Zeilenzahl ist technisch belegt |
|
|
| `Begrenzt` | Abfrage erfolgreich, aber das konfigurierte Zeilenlimit wurde erreicht |
|
|
| `Nicht verfügbar` | Klasse oder Berechtigung nicht verfügbar; eine Null ist nicht fachlich bestätigt |
|
|
| `Fehler` | Pflichtquelle lieferte kein verwertbares Ergebnis |
|
|
|
|
Dieses Modell verhindert die irreführende Interpretation eines fehlenden WMI-Ergebnisses als „keine Artefakte vorhanden“.
|
|
|
|
`MaxRowsPerArtifactType` begrenzt optional die Details pro Artefakttyp. Der Standard ist `10000`. Die Anwendungsliste aus `MSBTS_Application` wird nicht begrenzt.
|
|
|
|
## 6. Excel-Erzeugung
|
|
|
|
Die `.xlsx`-Datei ist ein OPC-/ZIP-Paket mit folgenden Kernteilen:
|
|
|
|
```text
|
|
[Content_Types].xml
|
|
_rels/.rels
|
|
docProps/core.xml
|
|
docProps/app.xml
|
|
xl/workbook.xml
|
|
xl/_rels/workbook.xml.rels
|
|
xl/styles.xml
|
|
xl/worksheets/sheet1.xml ... sheet10.xml
|
|
```
|
|
|
|
Zelltexte werden als `inlineStr` geschrieben. Dadurch wird keine Shared-String-Tabelle im Arbeitsspeicher aufgebaut. Zahlen werden als numerische Zellen gespeichert und können in Excel direkt summiert oder gefiltert werden.
|
|
|
|
Der Writer:
|
|
|
|
1. erzeugt eine eindeutige temporäre Datei im Zielordner,
|
|
2. schreibt und schließt alle XML-/ZIP-Teile,
|
|
3. entfernt eine gegebenenfalls vorhandene Zieldatei gleichen Namens,
|
|
4. verschiebt die vollständige temporäre Datei atomar auf den Zielnamen,
|
|
5. löscht temporäre Reste auch im Fehlerfall.
|
|
|
|
Ein einzelner Zelltext wird auf das Excel-Limit von 32.767 Zeichen begrenzt. Nicht XML-konforme Steuerzeichen werden entfernt.
|
|
|
|
## 7. Resilienz
|
|
|
|
- `SafeCollector` isoliert voneinander unabhängige Abschnitte.
|
|
- Jeder Abschnitt schreibt Start, Ende, Dauer und Fehler in Konsole und Log.
|
|
- Optionale WMI-Klassen werden einzeln behandelt.
|
|
- Timeout und maximale Detailzeilen sind in `App.config` konfigurierbar.
|
|
- Die XLSX wird auch bei optionalen Lücken erstellt.
|
|
- Die vollständige Anwendungsliste ist ein Pflichtabschnitt.
|
|
- Findings erklären Lücken und nennen eine konkrete Prüfung.
|
|
|
|
## 8. Datenschutz und Secrets
|
|
|
|
Das Inventar soll keine Credentials enthalten. Bekannte Kennwort-, Secret- und Tokenmuster in Text- und Adresswerten werden durch `[REDACTED]` ersetzt. Das ersetzt keine Schutzklassifizierung: interne Adressen, Servernamen, Hostgruppen und Anwendungsbezeichnungen bleiben sensible Betriebsinformationen.
|
|
|
|
Es werden keine Kennwörter abgefragt, keine Bindings exportiert und keine aktiven Endpunktverbindungen getestet.
|
|
|
|
## 9. Build, Test und Paketierung
|
|
|
|
Windows-Build:
|
|
|
|
```cmd
|
|
scripts\build-release.cmd
|
|
```
|
|
|
|
Der Build:
|
|
|
|
1. findet MSBuild über `vswhere.exe` oder `PATH`,
|
|
2. baut `Release|Any CPU`,
|
|
3. führt das Testprogramm aus,
|
|
4. führt den Self-Test der eigentlichen EXE aus.
|
|
|
|
Der Self-Test benötigt kein BizTalk. Er prüft:
|
|
|
|
- Secret-Redaktion
|
|
- Erstellung aller zehn Tabellenblätter
|
|
- Vorhandensein der erforderlichen OPC-/XLSX-Teile
|
|
- XML-Wohlgeformtheit aller Paketbestandteile
|
|
- erwartete Blattnamen
|
|
- Abwesenheit des Testkennworts
|
|
|
|
Deployment:
|
|
|
|
```cmd
|
|
scripts\package-release.cmd
|
|
```
|
|
|
|
Quell-ZIP und certutil-dekodierbarer Text:
|
|
|
|
```cmd
|
|
scripts\package-source.cmd
|
|
```
|
|
|
|
## 10. Validierung in ACC und PROD
|
|
|
|
Je Umgebung:
|
|
|
|
1. EXE mit `--self-test` starten.
|
|
2. Inventar in einer administrativen `cmd.exe` ausführen.
|
|
3. Exitcode und Log prüfen.
|
|
4. XLSX öffnen und Blatt `Abdeckung` prüfen.
|
|
5. Zahl der Anwendungen mit der BizTalk Administration Console vergleichen.
|
|
6. Stichproben für Ports, Orchestrierungen und Assemblies durchführen.
|
|
7. XLSX und Log im geschützten Umgebungsordner archivieren.
|
|
|
|
ACC- und PROD-Dateien dürfen nicht zusammengeführt werden, ohne die Spalten `Umgebung` und `Server` beizubehalten.
|