Initial commit: BizTalk application catalog
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user