Print Service – Einrichtung
Schritt-für-Schritt-Anleitung zur Einrichtung des merchantCENTRAL Print Service: von der Lizenz über die Installation des lokalen Druckdienstes und die Anbindung an Business Central bis zum ersten Testdruck.
Architektur in Kürze
Business Central (Cloud) kann lokale Drucker nicht direkt ansprechen. Der MC.PrintService ist eine kleine lokale Anwendung beim Kunden, die Druckaufträge entgegennimmt und an Windows- oder Zebra-Drucker weiterleitet.
┌──────────────────┐ Druckauftrag ┌──────────────────┐ PDF / ZPL ┌──────────────┐
│ Business Central │ ────────────────► │ MC.PrintService │ ─────────────► │ Drucker │
│ (Cloud/SaaS) │ │ (beim Kunden) │ │ Windows/Zebra│
└──────────────────┘ └──────────────────┘ └──────────────┘
Für den Weg von BC zum MC.PrintService gibt es drei Transportmodi. Sie werden je Drucker gewählt (Feld Transportmodus auf der Druckerkarte) und lassen sich mischen.
| Direkt-Push (Standard) | Relay (Azure-Queue) | Poll (Azure-Queue) | |
|---|---|---|---|
| Funktionsweise | BC ruft den Dienst direkt über die feste öffentliche Adresse auf | BC stellt den Auftrag in eine Queue im Azure des Kunden | Die Azure Function holt die Aufträge bei BC ab; BC bleibt passiv |
| Eingehende Portfreigabe | erforderlich | nicht erforderlich | nicht erforderlich |
| Feste öffentliche IP | erforderlich | nicht erforderlich | nicht erforderlich |
| HTTPS-Zertifikat | selbst verwalten | entfällt | entfällt |
| BC macht ausgehende Aufrufe | ja | ja (Auftrag inkl. Etikett) | nein (nur ein kurzer Wake-Ping) |
| Azure-Abonnement des Kunden | nein | ja (wenige Euro/Monat) | ja (wenige Euro/Monat) |
Welchen Modus wählen?
Direkt-Push ist der Standard und für die meisten Kunden die beste Wahl: keine Zusatzkosten, sofortige Statusrückmeldung, einfach. Voraussetzung sind eine feste öffentliche IP und die Möglichkeit, einen Port freizugeben. Relay und Poll sind für Kunden ohne feste IP bzw. ohne eingehende Portfreigabe. Der Unterschied: Bei Relay stellt BC den Auftrag aktiv in das Azure des Kunden; bei Poll bleibt BC vollständig passiv, die Function holt die Aufträge ab – ideal, wenn BC keine ausgehenden Webdienst-Aufrufe machen soll.
Wo laufen die Druckdaten?
Druckdaten laufen nie über Infrastruktur von ALTENBRAND: bei Direkt-Push direkt von Business Central zum MC.PrintService, bei Relay und Poll über das eigene Azure-Abonnement des Kunden.
Voraussetzungen
- [ ] merchantCENTRAL Hub – installiert und eingerichtet
- [ ] Print Service App – installiert (AppSource oder Bereitstellung durch ALTENBRAND)
- [ ] Modul-Lizenz – mindestens eine Demo-Lizenz für
PRINTSERVICE - [ ] Windows-Rechner im Kundennetz, der dauerhaft läuft und die Drucker erreicht: Windows 10 ab Version 1903, Windows 11 oder Windows Server 2022 und neuer, mit Administratorrechten für die Installation. Windows Server 2016/2019: nur mit dem ZIP-Paket (Variante B)
- [ ] Drucker – Windows-Druckertreiber (für PDF) oder Zebra-Drucker per TCP/IP im lokalen Netz erreichbar (für ZPL)
- [ ] Bei Direkt-Push zusätzlich: feste öffentliche IP und Zugriff auf Router/Firewall
- [ ] Bei Relay/Poll zusätzlich: ein Azure-Abonnement des Kunden (Details in Teil B)
Schritt 1: Lizenz und Modul aktivieren
Lizenz und Einschalten laufen – wie bei den anderen merchantCENTRAL-Modulen – über die zentrale Hub-Karte Erweiterung des Moduls.
- In BC nach merchantCENTRAL-Einrichtung suchen → Bereich Erweiterungen → Zeile Print Service → Aktion Einrichten (ein Klick auf den Namen öffnet dagegen das Dashboard). Es öffnet sich die Hub-Karte Erweiterung; ihr Teil Lizenz zeigt den Lizenzstatus. Auch direkt nach der Installation steht der Print Service dort: Beim Öffnen der merchantCENTRAL-Einrichtung registriert der Hub neu installierte Module.
- Demo registrieren (Aktion im Teil Lizenz) schaltet eine Demo-Lizenz frei; Lizenz aktualisieren fragt den Lizenzserver erneut ab. Bei einer Demo zeigt der Teil zusätzlich Demo-Status (verbleibende Tage) und Demo-Ablauf.
- In der Gruppe Allgemein derselben Karte den Schalter Aktiviert einschalten. Dabei prüft der Hub die Lizenz und bietet die Demo-Registrierung an.
Ohne eingeschaltetes Modul wird nichts automatisch gedruckt
Lizenz und Einschalten sind zwei Schritte. Solange das Modul nicht eingeschaltet ist, reiht der Print Service weder Versandetiketten noch Berichte aus Buchungen ein. Das Dashboard nennt diesen Grund im Hinweis-Banner.
Einrichtungsassistent
Die unterstützte Einrichtung merchantCENTRAL Druckservice einrichten (unter Unterstützte Einrichtung, auch als Aktion Einrichtungsassistent im Aktionsmenü der Druckservice-Einstellungen) führt durch die folgenden Schritte: Druckdienst herunterladen, ersten Drucker anlegen (mit Verbindungstest bei Direkt-Push) und automatischen Druck einschalten.
Schritt 2: MC.PrintService installieren
Der lokale Druckdienst wird einmalig auf einem Rechner im Kundennetz installiert, der dauerhaft läuft und die Drucker erreicht. Bei Relay und Poll arbeitet dieselbe Installation zusätzlich im Agent-Modus (siehe Teil B).
Variante A – MSIX über den App Installer (empfohlen)
- In BC die Druckservice-Einstellungen (Aktionsmenü des Teils, Gruppe Installation) oder eine Druckerkarte öffnen → Aktion Druckdienst herunterladen. Die Downloadseite ist auf die Versionen vorgefiltert, die zu Ihrer Installation passen.
- Die Installation über den Windows App Installer starten. Der Windows-Dienst
merchantCENTRAL Print Service (Dienstname
MCPrintService, Konto LocalSystem, Autostart) wird eingerichtet, gestartet und automatisch aktuell gehalten. - Auf dem Rechner die Konfigurationsoberfläche
http://localhost:5049/configöffnen – im Browser oder in BC mit der Aktion Lokale Konfiguration öffnen – und den API-Schlüssel mit Kopieren in die Zwischenablage legen. Angezeigt wird er nie. Er wird beim ersten Start automatisch erzeugt und bei Direkt-Push in BC benötigt.
Die eingehende Firewall-Regel für den Druck-Port legt der Dienst beim ersten Start selbst an.
Variante B – ZIP-Paket mit Install.bat
Sofern Ihnen ALTENBRAND ein ZIP-Paket bereitgestellt hat (auch für Windows Server 2016/2019, auf denen die MSIX-Installation nicht läuft):
- ZIP-Paket entpacken.
Install.batdoppelklicken → Benutzerkontensteuerung bestätigen.- Das Skript (
install.ps1) richtet den Windows-Dienst merchantCENTRAL Print Service (DienstnameMC.PrintService) mit Autostart und die Firewall-Regel ein. Den API-Schlüssel zeigt es nicht an, sondern legt ihn in die Zwischenablage – fügen Sie ihn in BC ein (A4). Später kopiert ihn die Konfigurationsoberfläche jederzeit wieder mit Kopieren.
Ports und API-Schlüssel
| Port | Zweck | Erreichbar |
|---|---|---|
| 5050 | Druck-API für Business Central | aus dem Netz – jeder Aufruf außer /health nur mit API-Schlüssel |
| 5049 | Konfigurationsoberfläche http://localhost:5049/config |
nur lokal auf dem Rechner selbst |
Die Konfigurationsoberfläche (im merchantCENTRAL-Layout, auf Deutsch und Englisch) zeigt:
- den Dienststatus und die Version,
- ob ein API-Schlüssel eingerichtet ist – den Schlüssel selbst nie. Kopieren legt ihn in die Zwischenablage; Neu erzeugen erzeugt einen neuen, legt ihn ebenfalls in die Zwischenablage und macht den alten sofort ungültig – danach muss er in BC ersetzt werden,
- den Agent-Modus für Relay/Poll mit der Warteschlange, die der Dienst liest,
- die installierten Windows-Drucker und einen ZPL-Verbindungstest,
- Einrichtungshinweise für Business Central.
Ohne API-Schlüssel keine Druck-API
Ohne eingerichteten API-Schlüssel lehnt die Druck-API jede Anfrage außer /health ab – aus
Business Central ebenso wie vom Rechner selbst. Neu erzeugen legt einen an. Relay- und
Poll-Drucker brauchen den Schlüssel nicht.
Konfigurationsdatei
Einstellungen und API-Schlüssel liegen unter
%ProgramData%\merchantCENTRAL\PrintService\appsettings.json (nur für SYSTEM und
Administratoren lesbar). Alle Einstellungen: MC.PrintService – Referenz.
Teil A: Direkt-Push einrichten
Beim Direkt-Push erreicht Business Central den MC.PrintService über die feste öffentliche IP des Kunden. Drei Schutzschichten sichern den Zugang ab: API-Schlüssel, HTTPS und eine Firewall-Einschränkung auf Business Central.
A1 – HTTPS bereitstellen
Business Central (Cloud) sendet Druckaufträge aus dem Azure-Rechenzentrum und validiert dabei das Serverzertifikat. Selbstsignierte Zertifikate funktionieren nicht. Wählen Sie eine Option:
| Option | Beschreibung | Geeignet für |
|---|---|---|
| Reverse Proxy (empfohlen) | Caddy, nginx oder IIS vor dem Dienst, Subdomain je Kunde (z. B. print.kunde.de → feste IP), Let's-Encrypt-Zertifikat automatisch |
die meisten Kunden mit eigener Domain |
| Let's-Encrypt-IP-Zertifikat | Zertifikat direkt auf die IP-Adresse (kurzlebig, automatische Erneuerung per ACME) | Kunden ohne Domain |
| Kestrel mit PFX | HTTPS direkt im Dienst: Kestrel:Endpoints:Https in appsettings.json mit Pfad zum Zertifikat |
einfache Setups mit vorhandenem Zertifikat |
Reverse Proxy mit Caddy
Caddy beschafft und erneuert Let's-Encrypt-Zertifikate vollautomatisch. Eine minimale
Caddyfile lautet: print.kunde.de { reverse_proxy localhost:5050 }.
Nur den Druck-Port veröffentlichen
Leiten Sie ausschließlich Port 5050 weiter. Die Konfigurationsoberfläche (Port 5049) darf nie über den Proxy oder die Firewall veröffentlicht werden.
A2 – Port-Forwarding einrichten
Leiten Sie im Router/Firewall den öffentlichen HTTPS-Port (z. B. 443) auf den Rechner mit dem MC.PrintService weiter (Port 5050 bzw. den Port des Reverse Proxy).
A3 – Firewall auf Business Central beschränken
Damit der weitergeleitete Port nicht für das gesamte Internet offen steht, beschränken Sie den
eingehenden Zugriff auf die IP-Adressen von Business Central. Diese sind im Azure-Service-Tag
Dynamics365BusinessCentral zusammengefasst (von Microsoft automatisch gepflegt).
- Firewalls mit Service-Tag-Unterstützung verwenden den Tag direkt.
- Andernfalls die IP-Bereiche als JSON-Liste herunterladen und als Regel hinterlegen.
A4 – Drucker in Business Central anlegen
- In BC nach Drucker (Druckservice) suchen → Neu.
- Transportmodus auf Direkt-Push belassen.
- Felder ausfüllen:
| Feld | Wert |
|---|---|
| Code | Eindeutige Kennung, z. B. PDF-BÜRO oder ZPL-LAGER1 |
| Beschreibung | Sprechender Name |
| Service-URL | Öffentliche HTTPS-URL des Dienstes, z. B. https://print.kunde.de (für lokale Tests http://localhost:5050) |
| API-Schlüssel | Feld anklicken → den in Schritt 2 kopierten API-Schlüssel einfügen (Strg+V). Er wird verschlüsselt gespeichert, das Feld zeigt nur Konfiguriert bzw. Nicht konfiguriert |
| Druckername | Bei PDF: exakter Windows-Druckername. Bei ZPL: IP-Adresse des Zebra-Druckers |
| Druckmethode | PDF (Windows-Drucker) oder ZPL (Zebra-Thermodrucker) |
| ZPL-Port | Nur bei ZPL: TCP-Port (Standard 9100) |
HTTPS-Pflicht für entfernte Adressen
Die Service-URL muss https:// verwenden. http:// ist nur für localhost/127.0.0.1
(lokale Tests) zulässig und wird für entfernte Adressen abgewiesen.
A5 – Verbindung testen
Auf der Druckerkarte die Aktion Verbindung testen ausführen. Bei Erfolg wechselt der Status auf Online. Anschließend einen Testdruck auslösen (siehe Druckwarteschlange).
| Fehler | Ursache | Lösung |
|---|---|---|
| Status Nicht verbunden | Dienst nicht erreichbar | Port-Forwarding, Reverse Proxy, Dienststatus prüfen |
Status Fehler, HTTP 401 |
API-Schlüssel fehlt oder ist falsch | In der Konfigurationsoberfläche mit Kopieren holen und auf der Druckerkarte im Feld API-Schlüssel neu einfügen |
| Zertifikatsfehler | Ungültiges oder selbstsigniertes Zertifikat | Gültiges Zertifikat (Let's Encrypt) verwenden |
Teil B: Relay und Poll (Azure)
Bei Relay und Poll betreibt der Kunde die Vermittlungskomponenten in seinem eigenen Azure:
eine Azure Function auf dem Flex-Consumption-Plan, einen Service Bus mit der Queue
print-jobs (bei mehreren druckenden Rechnern zusätzlich je Rechner eine Queue
print-jobs-<agent>, siehe Mehrere Rechner) und einen Storage Account für
die Etiketten. Der MC.PrintService läuft im Agent-Modus und hält nur eine ausgehende
Verbindung (AMQP über WebSockets, Port 443) – keine Portfreigabe, keine feste IP, kein eigenes
Zertifikat.
- Relay: BC stellt den Auftrag über die Function in die Queue.
- Poll: Die Function holt die Aufträge bei BC ab – nach einem kurzen Wake-Ping von BC sofort, sonst per Timer (Standard alle 5 Minuten). Ein Poll-Deployment bedient genau eine Company.
In beiden Modi meldet die Function das Druckergebnis an BC zurück; der Auftrag wechselt von Wird gesendet auf Gedruckt bzw. Fehlgeschlagen.
Ablauf in Kürze
- Azure-Ressourcen bereitstellen: In den Druckservice-Einstellungen (Aktionsmenü des
Teils, Gruppe Installation) die Aktion Relay/Poll in Azure einrichten ausführen. Sie
zeigt die Werte für
bcCompanyIdundbcEnvironmentUrlfertig ausgefüllt an und öffnet das Azure-Portal mit der Vorlage („Deploy to Azure"). Der Function-Code kommt mit der Vorlage. Für Poll den ParameterenablePoll = truesetzen, bei mehreren druckenden Rechnern zusätzlichagentNames(siehe Mehrere Rechner). - Business Central freigeben: Das Skript
grant-bc-access.ps1(z. B. in der Azure Cloud Shell) weist der Managed Identity der Function die App-Rolle API.ReadWrite.All von „Dynamics 365 Business Central" zu und gibt deren Client-ID aus. Diese in BC unter Microsoft Entra-Anwendungen eintragen (Status Aktiviert) und den Berechtigungssatz ALN MCPS Relay API (nur Relay) bzw. ALN MCPS Poll API (Poll, deckt Relay mit ab) zuweisen – in jeder Company mit Relay- oder Poll-Druckern. Weitere Berechtigungssätze wie D365 AUTOMATION sind nicht nötig: Beide Sätze schließen D365 Basic - Read ein. - Schlüssel abrufen: Function-Key (Function App → App keys →
default) und die Listen-Verbindungszeichenfolge der Queue (print-jobs→ Shared access policies →AgentListen). Bei mehreren Rechnern braucht jeder Rechner die Listen-Verbindungszeichenfolge seiner eigenen Queueprint-jobs-<agent>. - BC-Seite konfigurieren:
- Relay: Auf der Druckerkarte Transportmodus = Relay (Azure-Queue), Relay-Function-URL = Basis-URL der Function App, Relay-Function-Key anklicken und den Function-Key eingeben.
- Poll: Auf der Druckerkarte nur Transportmodus = Poll (Azure-Queue), Druckername und Druckmethode. Die Azure-Anbindung wird einmal zentral in den Druckservice-Einstellungen in der Gruppe Poll-Anbindung (Azure) hinterlegt (Poll-Function-URL, Poll-Function-Key). Dieser Wake-Ping ist im Echtbetrieb Pflicht: Ohne ihn bleibt BC vollständig passiv, und Poll druckt nur im 5-Minuten-Takt des Function-Timers. Mit der Aktion Poll-Anbindung testen prüfen Sie URL und Key; sie zeigt die Antwort der Function.
- Mehrere Rechner: zusätzlich auf der Druckerkarte das Feld Agent setzen (siehe Mehrere Rechner).
- Agent-Modus einschalten: In der
appsettings.jsondes MC.PrintService den AbschnittRelaybefüllen (Enabled, Listen-Verbindungszeichenfolge, Status-URL und Function-Key; bei mehreren Rechnern auchQueueName) und den Dienst neu starten. Siehe MC.PrintService – Referenz. - Testen: Ein Etikett auf den Relay- bzw. Poll-Drucker drucken. Ablauf: Wird gesendet → der Agent druckt → Gedruckt. Bei Poll ohne Wake-Ping kann es bis zum nächsten Timer-Lauf dauern.
Keine Zustimmung erteilen
Auf der Seite Microsoft Entra-Anwendungen die Aktion Zustimmung erteilen nicht
ausführen: Eine Managed Identity hat keine App-Registrierung, Entra meldet dort
AADSTS1003031. Die Zustimmung hat grant-bc-access.ps1 bereits erteilt – das Skript weist
am Ende selbst darauf hin.
Ausführliche Anleitung
Alle Parameter und Ausgaben der Vorlage, Kosten, Updates und die Fehlerbehebung für Relay und Poll beschreibt das Installations- und Benutzerhandbuch des Print Service (Kapitel 7 und 8).
Firewall beim Kunden
Der Agent braucht nur ausgehend Port 443 zu *.servicebus.windows.net. Eine eingehende
Portfreigabe ist nicht nötig.
Mehrere Rechner
Ein Rechner im Agent-Modus genügt oft, solange er alle Drucker erreicht: ZPL-Drucker spricht der Dienst über ihre IP-Adresse im Netz an, nur PDF-Drucker müssen auf dem Rechner als Windows-Drucker installiert sein. Drucken mehrere Rechner mit verschiedenen Druckern – z. B. einer im Lager die Etiketten, einer im Büro die Lieferscheine –, bekommt jeder Rechner seine eigene Queue:
- Deployment: Im Parameter
agentNamesdie Namen der Rechner angeben, z. B.["LAGER","BUERO"], und die Vorlage (erneut) in dieselbe Ressourcengruppe deployen. Für jeden Namen entsteht die Queueprint-jobs-<name>in Kleinbuchstaben mit eigener Listen-RegelAgentListen. Erlaubt sind Buchstaben, Ziffern und- _ ., höchstens 20 Zeichen. - Jeder Rechner: In der
appsettings.jsonRelay:QueueName=print-jobs-lagerund alsRelay:ServiceBusConnectionStringdie Listen-Verbindungszeichenfolge dieser Queue. Status-URL und Function-Key sind für alle Rechner gleich. Die Konfigurationsoberfläche zeigt unter Relay / Poll die Warteschlange an. - Druckerkarte: Feld Agent =
LAGERbei allen Druckern, die dieser Rechner druckt (Gruppe Relay (Azure-Queue) bzw. Poll (Azure-Queue)). Drucker ohne Agent laufen über die Standard-Queueprint-jobs.
Warum nicht alle Rechner an einer Queue?
Mehrere Agents an derselben Queue teilen sich die Aufträge: Jeder Auftrag geht an den Agent,
der ihn zuerst abholt. Fehlt dort der Drucker, schlägt der Auftrag fehl („Printer … is not
installed on the print service machine
Agent ohne Queue
Nennt ein Drucker einen Agent, für den das Deployment keine Queue hat, schlägt der Auftrag
sofort fehl: „No queue for print agent …". Nach dem Ergänzen von agentNames und erneutem
Deployment druckt Wiederholung ihn.
Druckwarteschlange prüfen
Neue Druckaufträge druckt der Print Service sofort: Jeder neue Auftrag – aus einer Buchung, einem Versandetikett, einem Druck von Hand oder einer Wiederholung – startet einen Hintergrund-Task, der ihn Sekunden nach dem Commit erzeugt und sendet, nie in der Buchung selbst. Zusätzlich legt die App einen Aufgabenwarteschlangenposten an, der die Druckwarteschlange alle 5 Minuten ausführt. Er ist das Sicherheitsnetz: Er sendet Wiederholungen nach Ablauf der Wartezeit und übernimmt Aufträge, die ein Task nicht erreicht hat.
Ob er eingeplant ist, zeigt in den Druckservice-Einstellungen das Feld Druckwarteschlange in der Gruppe Wartung (Geplant bzw. Nicht geplant - keine Wiederholungen). Ist er nicht eingeplant, die Aktion Druckwarteschlange neu starten ausführen.
Fehlerbehebung
Eine ausführliche Übersicht finden Sie unter MC.PrintService – Referenz.
Schnellprüfung auf dem Rechner mit dem Druckdienst:
- Dienst läuft? →
services.msc→ „merchantCENTRAL Print Service" muss Wird ausgeführt anzeigen. Der Dienstname (z. B. fürGet-Service) istMCPrintService(MSIX) bzw.MC.PrintService(ZIP). - Erreichbar? →
http://localhost:5050/healthim Browser (oder in BC die Aktion Lokalen Druckdienst prüfen) → zeigt die Statusseite „Der Druckdienst läuft". - Drucker sichtbar? →
http://localhost:5049/configlistet die installierten Windows-Drucker. - API-Schlüssel eingerichtet? → Die Konfigurationsoberfläche zeigt oben, ob ein Schlüssel eingerichtet ist (den Schlüssel selbst nie).
Die Aktionen Lokale Konfiguration öffnen und Lokalen Druckdienst prüfen (Druckservice-Einstellungen und Druckerkarte, Gruppe Installation) funktionieren nur auf dem Rechner, auf dem der Dienst installiert ist.
Nächste Schritte
- Drucker verwalten – Druckerliste, Status, Ersatzdrucker
- Routingregeln – Versandetiketten automatisch dem richtigen Drucker zuweisen
- Druckabonnements – automatischer Berichtsdruck nach Buchungen
- Einrichtung (Referenz) – alle Felder und Aktionen der Druckservice-Einstellungen
- MC.PrintService – Referenz – Installation, Konfiguration, Endpunkte, Fehlerbehebung