Closes the v2-mxgw migration's housekeeping debt now that PR 7.2 has retired the legacy projects + service. Repo docs: - CLAUDE.md: rewrote the Galaxy section + reference-impl + MXAccess documentation pointers; replaced .NET 4.8 x86 / COM apartment constraints with .NET 10 AnyCPU + a pointer to the gateway. Dropped the "Service hosting (Galaxy.Host)" library-preferences row. - docs/ServiceHosting.md: rewrote (was 156 lines of Galaxy.Host pipe IPC details). Now reflects the v2 process shape: OtOpcUa.Server + OtOpcUa.Admin + optional OtOpcUaWonderwareHistorian, with Galaxy access via the in-process driver → mxaccessgw. - docs/v2/dev-environment.md: scrubbed four Galaxy.Host references (TwinCAT/Galaxy.Host shared-host note; .NET 4.8 SDK row; install step #2; risks table). The .NET 4.8 SDK is now correctly framed as "optional, only needed when building the mxaccessgw worker". - mxaccess_documentation.md: deleted from the repo root (obsolete; the gateway repo is the canonical MxAccess API doc). Memory housekeeping (under ~/.claude/projects/.../memory/): - Retired: project_galaxy_host_service.md, project_galaxy_host_installed.md, reference_impl.md (the LmxProxy Host MXAccess reference is no longer the design pattern this repo uses). - Revised: project_overview.md (now describes the .NET 10 + mxaccessgw shape), project_aveva_platform_installed.md (AVEVA still required on the dev box but consumed by the gateway worker, not by anything here), project_galaxy_via_mxgateway.md (post-7.2 state — flagged as the only Galaxy backend), project_server_history_alarm_subsystems.md (per-driver fallbacks retired in PR 7.2). - MEMORY.md index updated to match. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
3.0 KiB
Markdown
63 lines
3.0 KiB
Markdown
# 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/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/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/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/ZB.MOM.WW.OtOpcUa.Driver.Historian.Wonderware.Client/Contracts/`
|
|
and the sidecar's pipe handler lives at
|
|
`src/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` — installs `OtOpcUa` and
|
|
optionally `OtOpcUaWonderwareHistorian`.
|
|
- `scripts/install/Uninstall-Services.ps1` — stops + removes both,
|
|
plus `OtOpcUaGalaxyHost` if 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).
|