ECIService – Installation & Konfiguration
Der ECIService ist eine Windows-Anwendung / ein Docker-Container, die als Brücke zwischen Business Central (Cloud) und lokalen Druckern im Netzwerk fungiert. Er empfängt Druckaufträge über HTTP und leitet sie an den konfigurierten Drucker weiter.
Übersicht
┌─────────────────┐ HTTPS ┌─────────────────┐ Lokal ┌─────────────────┐
│ Business Central│ ──────────────────► │ ECIService │ ──────────────► │ Drucker │
│ (Cloud/SaaS) │ Print Request │ (On-Premise) │ PDF/ZPL │ (Windows/Zebra)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
Systemvoraussetzungen
Windows Service
| Anforderung | Details |
|---|---|
| Betriebssystem | Windows 10/11 oder Windows Server 2016+ |
| Runtime | .NET 10 Runtime (im Installer enthalten) |
| Speicher | Min. 128 MB RAM |
| Netzwerk | Eingehende Verbindungen auf konfiguriertem Port (Standard: 5115) |
| Drucker | Für PDF: Windows-Druckertreiber installiert. Für ZPL: Zebra-Drucker per TCP/IP erreichbar |
Docker Container
| Anforderung | Details |
|---|---|
| Host | Linux oder Windows mit Docker Engine |
| Image | ghcr.io/altenbrand/eciservice:latest |
| Ports | Port 5115 (konfigurierbar) |
| Druckmethode | Nur ZPL (TCP/IP) out of the box. PDF mit CUPS-Sidecar möglich |
Installation
Option A: Windows Service (empfohlen für PDF + ZPL)
- Installer herunterladen: Von der internen Downloads-Seite oder per Bereitstellung durch ALTENBRAND
- Installation starten:
ECIService-Setup.exeals Administrator ausführen - Installationsverzeichnis wählen: Standard:
C:\Program Files\ALTENBRAND\ECIService - Port konfigurieren: Standard: 5115 (kann bei Konflikten geändert werden)
- Als Dienst registrieren: Der Installer registriert den ECIService automatisch als Windows-Dienst
- Dienst starten: Der Dienst startet automatisch (Starttyp: Automatisch)
Option B: Docker Container (empfohlen für ZPL-only)
docker run -d \
--name eciservice \
-p 5115:5115 \
-e ECISERVICE_PORT=5115 \
--restart unless-stopped \
ghcr.io/altenbrand/eciservice:latest
Für ZPL-Drucker muss der Container Netzwerkzugriff auf die Zebra-Drucker haben (TCP Port 9100).
Option C: Interaktiver Modus (nur für Entwicklung/Tests)
dotnet ECIService.dll
Startet die Anwendung als Konsolenanwendung mit Tray-Icon. Nützlich für Fehlersuche und Tests.
Konfiguration
appsettings.json
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:5115"
}
}
},
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"PrintService": {
"DefaultZplPort": 9100,
"PrintTimeout": 30000,
"HealthCheckInterval": 60
}
}
| Einstellung | Beschreibung | Standard |
|---|---|---|
Kestrel:Endpoints:Http:Url |
IP und Port für eingehende Verbindungen | http://0.0.0.0:5115 |
PrintService:DefaultZplPort |
Standard-TCP-Port für ZPL-Drucker | 9100 |
PrintService:PrintTimeout |
Timeout in ms für einen einzelnen Druckauftrag | 30000 |
PrintService:HealthCheckInterval |
Intervall in Sekunden für Drucker-Health-Checks | 60 |
API-Endpunkte
| Endpunkt | Methode | Beschreibung |
|---|---|---|
/health |
GET | Health-Check (HTTP 200 wenn Service läuft) |
/printers |
GET | Liste aller verfügbaren Drucker auf dem Host |
/capabilities |
GET | Feature-Discovery (unterstützte Druckmethoden, Version) |
/print/pdf |
POST | PDF-Label drucken (Body: JSON mit Base64-PDF + Druckername) |
/print/zpl |
POST | ZPL-Label drucken (Body: JSON mit Base64-ZPL + Drucker-IP + Port) |
/print/zpl/test |
GET | ZPL-Drucker Konnektivitätstest |
Beispiel: PDF drucken
POST /print/pdf
Content-Type: application/json
{
"printerName": "HP LaserJet Pro",
"content": "JVBERi0xLjQK...",
"copies": 1
}
Beispiel: ZPL drucken
POST /print/zpl
Content-Type: application/json
{
"printerHost": "192.168.1.50",
"printerPort": 9100,
"content": "Xl5YQQpeQ0kxMw..."
}
Netzwerk & Firewall
Eingehend (Business Central → ECIService)
| Richtung | Port | Protokoll | Beschreibung |
|---|---|---|---|
| Eingehend | 5115 (konfigurierbar) | TCP/HTTP | Druckaufträge von BC |
Kein HTTPS by Default
Der ECIService lauscht standardmäßig auf HTTP. Für Zugriff aus dem Internet (z. B. bei BC SaaS ohne VPN) sollte ein Reverse Proxy mit TLS-Terminierung (nginx, Caddy, IIS ARR) vorgeschaltet werden.
Ausgehend (ECIService → Drucker)
| Richtung | Port | Protokoll | Beschreibung |
|---|---|---|---|
| Ausgehend | 9100 | TCP (Raw) | ZPL-Direktdruck auf Zebra-Drucker |
| Lokal | — | Windows GDI | PDF-Druck über lokale Druckertreiber |
Fehlerbehebung
ECIService nicht erreichbar
- Dienst läuft? → Windows-Dienste (
services.msc) prüfen → „ECIService" muss „Running" sein - Port offen? →
netstat -an | findstr 5115→ Muss „LISTENING" zeigen - Firewall? → Windows-Firewall-Regel für Port 5115 eingehend prüfen
- Health-Check: →
http://<host>:5115/healthim Browser öffnen
Drucker wird nicht gefunden
- Windows-Drucker: Drucker muss in der Windows-Druckerverwaltung des ECIService-Hosts sichtbar sein
- Name exakt: Druckername in BC muss exakt dem Windows-Druckernamen entsprechen (Groß-/Kleinschreibung)
- Prüfung:
http://<host>:5115/printerszeigt alle verfügbaren Drucker
ZPL-Druck fehlgeschlagen
- Netzwerk: Zebra-Drucker per
ping <ip>erreichbar? - Port:
telnet <ip> 9100— Verbindung muss aufgebaut werden - Testdruck:
http://<host>:5115/print/zpl/testfür automatischen Konnektivitätstest
Deployment-Optionen im Vergleich
| Aspekt | Windows Service | Docker | Interaktiv |
|---|---|---|---|
| PDF-Druck | ✅ Volle Unterstützung | ⚠️ Nur mit CUPS-Sidecar | ✅ Volle Unterstützung |
| ZPL-Druck | ✅ TCP/IP | ✅ TCP/IP | ✅ TCP/IP |
| Autostart | ✅ Windows-Dienst | ✅ restart-policy | ❌ Manuell |
| Headless | ✅ | ✅ | ❌ (Tray-Icon) |
| Updates | Installer / MSI | docker pull |
Manuell |
| Empfohlen für | Produktion (PDF + ZPL) | Produktion (ZPL only) | Entwicklung / Tests |
Produktionsempfehlung
Für die meisten Kunden ist der Windows Service die beste Wahl: Er unterstützt sowohl PDF- als auch ZPL-Druck und startet automatisch nach Neustarts. Docker ist ideal für reine ZPL-Umgebungen (Lager mit Zebra-Druckern).