Rewrite src/ and tests/ project paths in docs, CLAUDE.md, README.md, and test-fixture READMEs to the new module-folder layout (Core/Server/Drivers/ Client/Tooling). References to retired v1 projects (Galaxy.Host/Proxy/Shared, the legacy monolithic test projects) are left untouched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.0 KiB
Service Hosting
Overview
A production OtOpcUa deployment runs two or three processes, each with a distinct runtime and install surface:
| Process | Project | Runtime | Platform | Responsibility |
|---|---|---|---|---|
| OtOpcUa Server | src/Server/ZB.MOM.WW.OtOpcUa.Server |
.NET 10 | x64 | Hosts the OPC UA endpoint; loads every driver in-process (Modbus, S7, AbCip, AbLegacy, TwinCAT, FOCAS, OPC UA Client, Galaxy via mxaccessgw); exposes /healthz. |
| OtOpcUa Admin | src/Server/ZB.MOM.WW.OtOpcUa.Admin |
.NET 10 (ASP.NET Core / Blazor Server) | x64 | Operator UI for Config DB editing + fleet status, SignalR hubs (FleetStatusHub, AlertHub), Prometheus /metrics. |
| OtOpcUa Wonderware Historian (optional) | src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Historian.Wonderware |
.NET Framework 4.8 | x86 (32-bit) | Out-of-process sidecar exposing the Wonderware Historian SDK over a named pipe. Required only when Historian:Wonderware:Enabled=true in appsettings.json. |
Galaxy access uses a separately-installed mxaccessgw running out
of a sibling repo (c:\Users\dohertj2\Desktop\mxaccessgw\) — see
docs/v2/Galaxy.ParityRig.md for setup. The mxaccessgw owns the
MXAccess COM bitness constraint (its worker is x86 net48); nothing
in the OtOpcUa repo carries that constraint anymore. PR 7.2 retired
the legacy in-process Galaxy.Host / Galaxy.Proxy / Galaxy.Shared
projects + the OtOpcUaGalaxyHost Windows service.
OtOpcUa Server
Hosted via Microsoft.Extensions.Hosting with AddWindowsService
(decision #30 — replaced TopShelf in v2). The host's Build()
returns immediately when launched interactively (e.g. dotnet run)
but blocks for SCM signals when running as a Windows service.
In-process drivers are registered at startup in Program.cs's
DriverFactoryRegistry block; the DriverInstance rows in the
central Config DB select which driver factories materialise into
live IDriver instances. See docs/v2/driver-specs.md for the
per-driver DriverConfig JSON shapes.
OtOpcUa Admin
Same hosting model; runs the Blazor Server UI + SignalR hubs. Reads from the same Config DB the Server writes to.
OtOpcUa Wonderware Historian (optional)
When Historian:Wonderware:Enabled=true, the Server speaks to a
sidecar that wraps the Wonderware Historian SDK (which is .NET
Framework only). The pipe IPC contract is in
src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Historian.Wonderware.Client/Contracts/
and the sidecar's pipe handler lives at
src/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Historian.Wonderware/Pipe/.
Install via the -InstallWonderwareHistorian switch on
scripts/install/Install-Services.ps1.
Install / Uninstall
scripts/install/Install-Services.ps1— installsOtOpcUaand optionallyOtOpcUaWonderwareHistorian.scripts/install/Uninstall-Services.ps1— stops + removes both, plusOtOpcUaGalaxyHostif a pre-7.2 rig still carries it.
Logging
Serilog with rolling-daily file sinks. Each service writes to
%ProgramData%\OtOpcUa\<service>-*.log plus stdout (NSSM-friendly).