Direkt zum Hauptinhalt

Konfiguration

Die Konfiguration des MesoWorkerService erfolgt je nach Installationsmethode unterschiedlich:

  • Windows-Dienst: Über die Datei appsettings.json
  • Container: Über Umgebungsvariablen

Lizenzierung

Für den Betrieb des MesoWorkerService benötigen Sie eine gültige Lizenz, die Sie von Ihrem Mesonic Partner erhalten.

Erforderliche Angaben:

  • Kundennummer: Identifiziert den Lizenzinhaber
  • Lizenznummer: Aktiviert die Software

Wichtig: Ohne gültige Lizenz startet der Service nicht.

Verfügbare Module

Der MesoWorkerService besteht aus einem Basisprodukt und vier optionalen Modulen. Jedes Modul muss separat lizenziert werden:

Basisprodukt:

  • MESO-WorkerService - Grundfunktionalität des Dienstes (erforderlich)

Module:

  • MESO-WSMAIL - Mesonic WorkerService Erweiterung Mailservice

    • Aktiviert MailWorkerJob für automatischen E-Mail-Versand aus CRM-Workflows
    • Aktiviert NoRuleWarningJob für Warnungen bei fehlenden Mail-Empfängern
  • MESO-WSBELEG - Mesonic WorkerService Erweiterung Belegzeilenworkflows

    • Aktiviert OrderLineWorkerJob für automatische Workflow-Erzeugung aus Bestelldateizeilen
  • MESO-WSGRAPH - Mesonic WorkerService Erweiterung Graph API Terminabgleich

    • Aktiviert AppointmentWorkerJob für Terminsynchronisation über Microsoft Graph API
  • MESO-WSOP - Mesonic WorkerService Erweiterung Offene Posten

    • Aktiviert OpenItemWorkerJob für automatischen Versand von OP-Übersichten und Mahnungen

Modulprüfung beim Start:

Beim Start des Services werden automatisch alle lizenzierten Module erkannt und nur die entsprechenden Jobs aktiviert. Im Log sehen Sie:

Licensed modules: Mail, OrderLine, GraphApi, OpenItem
✓ MESO-WSMAIL (Mailservice) - MailWorkerJob and NoRuleWarningJob will be activated
✓ MESO-WSBELEG (Belegzeilenworkflows) - OrderLineWorkerJob will be activated
✓ MESO-WSGRAPH (Graph API Terminabgleich) - AppointmentWorkerJob will be activated
✓ MESO-WSOP (Offene Posten) - OpenItemWorkerJob will be activated

Falls ein Modul nicht lizenziert ist, wird der entsprechende Job übersprungen:

Job MailWorkerJob requires module Mail which is not licensed - skipping registration

Hinweis: Das Basisprodukt MESO-WorkerService muss immer lizenziert sein. Die Module können je nach Bedarf einzeln oder in Kombination lizenziert werden.

Datenbankverbindungen

Der MesoWorkerService benötigt Zugriff auf zwei Datenbanken:

1. Anwendungsdatenbank (MesoWorkerDb)

  • Speichert Konfigurationsdaten, Mail-Journal und Protokolle
  • Muss vor dem ersten Start erstellt werden (siehe Datenbank-Ersteinrichtung), alternativ automatische Erstellung bei entsprechenden DB-Berechtigungen
  • Connection String Format: Data Source=SERVER;Initial Catalog=MesoWorkerDb;...

2. WinLine Systemdatenbank (CWLSYSTEM)

  • Zugriff auf WinLine Mandanten und Systemdaten
  • Connection String Format: Data Source=SERVER;Initial Catalog=CWLSYSTEM;...

Authentifizierungsoptionen:

  • Windows-Authentifizierung: Integrated Security=true
  • SQL-Authentifizierung: User ID=user;Password=pass

Wichtig: Für Container-Deployment muss SQL-Authentifizierung verwendet werden, da Windows-Authentifizierung in Containern nicht unterstützt wird.

WinLine-Integration

WinLine-Pfad:

  • Pfad zur WinLine-Installation (z.B. C:\WinLine\ oder /app/winline/)
  • Erforderlich für Zugriff auf WinLine-Konfigurationsdateien
  • Wichtig für Container (Linux): Der WinLine-Pfad ist typischerweise eine Windows-UNC-Freigabe (z.B. \\winline-server\WinLine), die als Linux-Mountpoint oder Volume in den Container eingebunden werden muss
  • Wird auch für die Erstellung von CRM-Workflow-Schritten über den WinLine WebService benötigt

TemplateForWorkflowImport:

  • Template-ID (numerisch) für den Workflow-Import beim Erstellen von CRM-Workflow-Schritten
  • Wird vom Mail-Dienst (Workflow-Schritt-Erstellung) und von der Workflow-Erzeugung aus Bestelldateizeilen verwendet
  • Beispiel: 101 — muss einer gültigen Workflow-Vorlage in WinLine entsprechen
  • Bei Wert 0 oder fehlender Konfiguration wird die Workflow-Schritt-Erstellung übersprungen

Mesospool Service:

  • URL zum Mesospool-Service für Dokumentenarchivierung
  • Format: http://server:42024
  • Erforderlich für Anhang-Funktionen
  • Wichtig für Container (Linux): Bei Linux-Containern ist der Mesospool-Service zwingend erforderlich, da die unter WinLinePath vorhandene mesospool.exe nicht unter Linux lauffähig ist
  • Wird generell zur Konvertierung von Archiv-Dateien im WinLine .SPL-Format in PDF-Dateien verwendet
  • Falls keine .SPL-Dateien vorliegen, ist der Service optional

WinLine Server (optional):

  • URL zum WinLine WebService (z.B. http://server:8080)
  • Erforderlich wenn automatische CRM-Workflow-Schritte erstellt werden sollen (z.B. für Workflow-Erzeugung aus Bestelldateizeilen)
  • Erforderlich für den Download des OP-Blatts aus FIBU als PDF-Anhang im OP-Modul
  • Verwendet den WinLine-Pfad für die Workflow-Schritt-Erstellung
  • Benötigt separate Mesonic WebService-Lizenz

MesoArchivWeb (optional):

  • BaseUrl: URL zum MesoArchivWeb-Dokumentenarchiv (z.B. http://archiv-server:5000)
  • JwtSecret: Gemeinsames JWT-Secret für die Authentifizierung zwischen MesoWorkerService und MesoArchivWeb
  • Erforderlich für das Anhängen von Archiv-Dokumenten (Originalrechnungen) im OP-Modul und Mail-Dienst
  • Ermöglicht das Erzeugen externer Archiv-Links ({ArchivLinkExt:...}) in OP-Vorlagen

Session-Einstellungen:

  • Standard-Anmeldedaten für WinLine-Sessions
  • Mindestanzahl aktiver Sessions
  • Validierungsintervall für Sessions

Windows-Dienst Konfiguration

Bei der Windows-Dienst-Installation erfolgt die Konfiguration über die Datei appsettings.json:

{
  "Kestrel": {
    "Endpoints": {
      "Http": { "Url": "http://0.0.0.0:5000" }
    }
  },
  "License": {
    "CustomerNr": "12345",
    "LicenseNr": "LIZENZNUMMER"
  },
  "ConnectionStrings": {
    "ConnectionString": "Data Source=SQL-SERVER;Initial Catalog=MesoWorkerDb;Integrated Security=true;TrustServerCertificate=true",
    "WinLineSystemDBConnectionString": "Data Source=SQL-SERVER;Initial Catalog=CWLSYSTEM;Integrated Security=true;TrustServerCertificate=true"
  },
  "WinLineSettings": {
    "WinLinePath": "C:\\WinLine\\",
    "MesospoolServiceUrl": "http://winline-server:42024",
    "TemplateForWorkflowImport": 101
  },
  "WinLineServer": {
    "Url": "http://winline-server:8080"
  },
  "MesoArchivWeb": {
    "BaseUrl": "http://archiv-server:5000",
    "JwtSecret": "IHR-JWT-SECRET"
  },
  "SessionSettings": {
    "MinimumSessions": 1,
    "DefaultUser": "winline-user",
    "DefaultPassword": "passwort",
    "ValidationInterval": "01:00:00"
  },
  "MailSettings": {
    "EmailFrom": "[email protected]",
    "DisplayName": "MesoWorkerService",
    "SmtpHost": "smtp.firma.de",
    "SmtpPort": 587,
    "SmtpUser": "smtp-user",
    "SmtpPass": "smtp-passwort",
    "UseSSL": false,
    "UseStartTls": true,
    "AdminMailRecipients": ["[email protected]"]
  },
  "SmtpDebug": {
    "Enabled": false,
    "SaveEmlToDirectory": ""
  },
  "Quartz": {
    "quartz.scheduler.instanceName": "Meso Worker Services Scheduler",
    "MailWorkerJob": {
      "scheduler": "* * * * * ?",
      "enabled": true,
      "startnow": true
    },
    "NoRuleWarningJob": {
      "scheduler": "0 0 8 * * ?",
      "enabled": true,
      "startnow": false
    },
    "OrderLineWorkerJob": {
      "scheduler": "0 */5 * * * ?",
      "enabled": true,
      "startnow": true
    },
    "AppointmentWorkerJob": {
      "scheduler": "0 */10 * * * ?",
      "enabled": true,
      "startnow": true
    },
    "OpenItemWorkerJob": {
      "scheduler": "0 0 7 * * ?",
      "enabled": true,
      "startnow": false
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "Logs/MesoWorkerService-.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  }
}

Wichtige Einstellungen:

  • Kestrel: Web-Server-Konfiguration (Standard: Port 5000)
  • License: Kundennummer und Lizenznummer (erforderlich)
  • ConnectionStrings: Datenbankverbindungen (erforderlich)
  • WinLineSettings: WinLine-Integration (erforderlich)
  • WinLineServer: URL zum WinLine WebService (optional, für Workflow-Schritte und OP-Blatt)
  • MesoArchivWeb: Verbindung zum Dokumentenarchiv (optional, für Archiv-Anhänge im OP-Modul und Mail-Dienst)
  • SessionSettings: WinLine-Session-Verwaltung
  • MailSettings: E-Mail-Versand-Konfiguration (wird meist über Admin-Oberfläche verwaltet)
  • SmtpDebug: SMTP-Diagnose-Modus für E-Mail-Fehlerbehebung (siehe SMTP-Debug-Modus)
  • Quartz: Job-Zeitplanung für automatische Ausführungen (Cron-Expressions)
  • Logging/Serilog: Protokollierungseinstellungen

Portainer Stack Konfiguration

Bei Container-Deployment erfolgt die Konfiguration über Umgebungsvariablen:

version: '3.8'

services:
  mesoworkerservice-ui:
    image: ghcr.io/css-edv-support/mesoworkerservice-blazor:latest
    container_name: mesoworkerservice-ui
    restart: unless-stopped
    ports:
      - "8012:5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:5000
      - TZ=Europe/Berlin
      
      # Datenbank (erforderlich)
      - ConnectionStrings__ConnectionString=Data Source=SQL-SERVER;Initial Catalog=MesoWorkerDb;User ID=sql-user;Password=sql-pass;TrustServerCertificate=true
      - ConnectionStrings__WinLineSystemDBConnectionString=Data Source=SQL-SERVER;Initial Catalog=CWLSYSTEM;User ID=sql-user;Password=sql-pass;TrustServerCertificate=true

  mesoworkerservice:
    image: ghcr.io/css-edv-support/mesoworkerservice-service:latest
    container_name: mesoworkerservice
    restart: unless-stopped
    ports:
      - "8013:5000"
    
    # Volume-Mapping für WinLine-Pfad (erforderlich für Linux-Container)
    volumes:
      - type: bind
        source: //winline-server/WinLine  # Windows UNC-Pfad
        target: /app/winline               # Linux-Mountpoint im Container
        read_only: true
    
    environment:
      # Container-Konfiguration
      - ASPNETCORE_ENVIRONMENT=Production
      - DOTNET_RUNNING_IN_CONTAINER=true
      - ASPNETCORE_URLS=http://+:5000
      - TZ=Europe/Berlin
      - LANG=de_DE.UTF-8
      
      # Lizenzierung (erforderlich)
      - LICENSE_CUSTOMER_NR=12345
      - LICENSE_LICENSE_NR=LIZENZNUMMER
      
      # Datenbankverbindungen (erforderlich)
      - ConnectionStrings__ConnectionString=Data Source=SQL-SERVER;Initial Catalog=MesoWorkerDb;User ID=sql-user;Password=sql-pass;TrustServerCertificate=true
      - ConnectionStrings__WinLineSystemDBConnectionString=Data Source=SQL-SERVER;Initial Catalog=CWLSYSTEM;User ID=sql-user;Password=sql-pass;TrustServerCertificate=true
      
      # WinLine-Konfiguration (erforderlich)
      - WinLineSettings__WinLinePath=/app/winline/
      - WinLineSettings__MesospoolServiceUrl=http://winline-server:42024
      - WinLineSettings__TemplateForWorkflowImport=101
      
      # WinLine Server (optional, für Workflow-Schritte und OP-Blatt)
      - WinLineServer__Url=http://winline-server:8080

      # MesoArchivWeb (optional, für Archiv-Anhänge)
      - MesoArchivWeb__BaseUrl=http://archiv-server:5000
      - MesoArchivWeb__JwtSecret=IHR-JWT-SECRET

      # Session-Einstellungen
      - SessionSettings__MinimumSessions=1
      - SessionSettings__DefaultUser=winline-user
      - SessionSettings__DefaultPassword=passwort
      - SessionSettings__ValidationInterval=01:00:00
      
      # E-Mail-Konfiguration (optional, kann über Admin-UI konfiguriert werden)
      - [email protected]
      - MailSettings__DisplayName=MesoWorkerService
      - MailSettings__SmtpHost=smtp.firma.de
      - MailSettings__SmtpPort=587
      - MailSettings__SmtpUser=smtp-user
      - MailSettings__SmtpPass=smtp-passwort
      - MailSettings__UseSSL=false
      - MailSettings__UseStartTls=true
      - [email protected]

      # SMTP-Debug-Modus (optional, nur zur Fehlerdiagnose)
      - SmtpDebug__Enabled=false
      - SmtpDebug__SaveEmlToDirectory=

      # Job-Konfiguration
      - Quartz__quartz.scheduler.instanceName=Meso Worker Services Scheduler
      - Quartz__MailWorkerJob__scheduler=* * * * * ?
      - Quartz__MailWorkerJob__enabled=true
      - Quartz__MailWorkerJob__startnow=true
      - Quartz__NoRuleWarningJob__scheduler=0 0 8 * * ?
      - Quartz__NoRuleWarningJob__enabled=true
      - Quartz__NoRuleWarningJob__startnow=false
      - Quartz__OrderLineWorkerJob__scheduler=0 */5 * * * ?
      - Quartz__OrderLineWorkerJob__enabled=true
      - Quartz__OrderLineWorkerJob__startnow=true
      - Quartz__AppointmentWorkerJob__scheduler=0 */10 * * * ?
      - Quartz__AppointmentWorkerJob__enabled=true
      - Quartz__AppointmentWorkerJob__startnow=true
      - Quartz__OpenItemWorkerJob__scheduler=0 0 7 * * ?
      - Quartz__OpenItemWorkerJob__enabled=true
      - Quartz__OpenItemWorkerJob__startnow=false
      
      # Protokollierung
      - Logging__LogLevel__Default=Information
      - Logging__LogLevel__Microsoft.Hosting.Lifetime=Information
      - Serilog__MinimumLevel__Default=Information
      - Serilog__MinimumLevel__Override__Microsoft=Information
      - Serilog__MinimumLevel__Override__System=Warning

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
      interval: 3600s
      timeout: 10s
      retries: 3
      start_period: 60s
    
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '1.0'
        reservations:
          memory: 512M
          cpus: '0.5'

Konfigurationshinweise:

  • Ersetzen Sie SQL-SERVER, sql-user, sql-pass mit Ihren Datenbankzugangsdaten
  • Ersetzen Sie winline-server, winline-user, passwort mit Ihren WinLine-Zugangsdaten
  • Ersetzen Sie 12345 und LIZENZNUMMER mit Ihrer Lizenz
  • Passen Sie smtp.firma.de, smtp-user, smtp-passwort an Ihren SMTP-Server an
  • Die E-Mail-Einstellungen können auch später über die Admin-Oberfläche konfiguriert werden
  • SmtpDebug: Aktivieren Sie SmtpDebug__Enabled=true nur temporär zur Fehlerdiagnose (siehe SMTP-Debug-Modus)
  • Wichtig für Linux-Container: Der MesospoolServiceUrl ist bei Linux-Containern zwingend erforderlich, da die mesospool.exe aus dem WinLinePath nicht unter Linux lauffähig ist. Dieser Service wird zur Konvertierung von WinLine .SPL-Archivdateien in PDF verwendet.
  • Volume-Mapping für WinLine-Pfad: Der WinLine-Pfad (typischerweise eine Windows-UNC-Freigabe wie \\winline-server\WinLine) muss als Volume in den Container eingebunden werden. Passen Sie source an Ihren WinLine-Server an. Der Container greift dann über /app/winline darauf zu.

Cron-Expressions für Job-Zeitplanung:

  • * * * * * ? = Jede Sekunde (Mail-Dienst, Standard)
  • 0 */5 * * * ? = Alle 5 Minuten (Workflow-Erzeugung)
  • 0 */10 * * * ? = Alle 10 Minuten (Terminsynchronisation)
  • 0 0 7 * * ? = Täglich um 7:00 Uhr (OP-Versand)
  • 0 0 8 * * ? = Täglich um 8:00 Uhr (Überwachungsdienst)