mirror of
https://github.com/OPCFoundation/UA-.NETStandard.git
synced 2026-10-17 05:11:13 +08:00
0374e19121
# Description _Describe the changes here to communicate to the maintainers why they should accept this pull request. By default - this will become the Commit message after merging and thus define history._ Add provider-backed MachineTool, bundled WMTP, GMS and CranesHoists companions using the existing Machinery/MachineVision fluent, DI and typed-client approach. **The PR is open/non-draft by user choice. Current head `ecc4a7d6ca3e8004cf28ab54da605da302d026bf` is mergeable and has 108 successful checks, six intentionally skipped checks, zero failures and zero pending checks. All five primary workflows completed successfully at that exact head.** | Family | Released specification/model | Packaging | | --- | --- | --- | | MachineTool | OPC 40501-1, 1.02.0 | Model, Server, Client and MCP; normal root versions | | WMTP | OPC 40505, 1.0.0 | Bundled in MachineTool; distinct CLR/wire namespace and independent WMTP-only hosting | | GMS | OPC 40210 reference 1.0.1, normative model 1.0.0 | Model, Server, Client and MCP; normal root versions | | CranesHoists | OPC 40020-1, 1.00 | Model, Server, Client and MCP; all four plus Debug variants forced preview | There are **12 new packable projects**. No separate WMTP package/profile/guide, root version bump, tag, release or package publication is included. Mandatory instance structure is the default; selected optional features require explicit providers. The implementation reuses Machinery results/jobs/files/ProcessValues and Robotics topology, including retained MachineTool Production, defined GMS jobs/parts, modern ISA95/Machinery jobs, shared-owner hosting and isolated instances alongside MachineVision. Runtime and integration fixes preserve raw quality/timestamps, coherent acquisition, namespace ownership, accepted-configuration state, borrowed-resource lifetime, session/node/file cleanup, terminal-value publication, event propagation and endpoint-aware capability publication. Firmware/licence transfer means provider acceptance, not installation/activation. Cancellation does not silently abort another caller's operation. The later upstream MCP expansion is integrated without losing either family set or its default-off privileged/live execution policy. ### Conformance and scope Canonical model inputs are pinned to UA-Nodeset revision `96a08945425d0295edb3607d2a38f6841ef44046`. **GMS upstream exception:** [Annex A.1](https://reference.opcfoundation.org/specs/OPC-40210/annex-a) makes the released NodeSet normative, but §12.3.2.7 requires undefined `GMS_ProductionStatisticsType`. Inherited statistics and defined jobs/parts are implemented without inventing a standard type/NodeId; the complete GMS Production facet is withheld. The requirement ledger records **102 positively evidenced CU rows, 96 directly negative-tested rows and six explicit negative-evidence limitations**. All 648 test-class/name/TRX links were independently resolved to passing cases. The six limitations concern Stacklight, retained legacy PowerOnDuration, Machinery PowerOnDuration, WorkingUnit, Obligation and MaintenanceMode. They are not claims that every invalid-input or hardware-control behavior was tested. The undefined GMS requirement is outside the 102 defined CUs. No external certification claim is made. Retained baseline complete-assembly line coverage, with generated code retained and no source exclusions: | Family | Model | Server | Client | | --- | ---: | ---: | ---: | | MachineTool/WMTP | 83.80% | 91.98% | 84.74% | | GMS | 95.51% | 90.63% | 88.38% | | CranesHoists | 92.76% | 94.45% | 92.24% | These nine measurements predate the later focused review fixes and merges; they are not relabelled as new `ecc4a7d6c` percentages. The current head's separate CI code-coverage check succeeded. No new exclusions or threshold relaxations were introduced. ## Related Issues - Fixes [#4764](https://github.com/OPCFoundation/UA-.NETStandard/issues/4764), the implementation/design and acceptance tracker. ## Checklist _Put an `x` in the boxes that apply. You can complete these step by step after opening the PR._ - [ ] I have signed the [CLA](https://opcfoundation.org/license/cla/ContributorLicenseAgreementv1.0.pdf) and read the [CONTRIBUTING](https://github.com/OPCFoundation/UA-.NETStandard/blob/master/CONTRIBUTING.md) doc. - [x] I have added tests that prove my fix is effective or that my feature works and increased code coverage. - [x] I have added all necessary documentation. - [ ] I have verified that my changes do not introduce (new) build or analyzer warnings. - [ ] I ran **all** tests locally using the **UA.slnx** solution against at least .net **framework** and .net **10**, and all passed. - [ ] I fixed **all** failing and flaky tests in the CI pipelines and **all** CodeQL warnings. - [x] I have addressed **all** PR feedback received.
753 lines
44 KiB
Markdown
753 lines
44 KiB
Markdown
# OPC UA Profiles and Facets Support
|
|
|
|
This document describes which [OPC UA Profiles and Facets](https://profiles.opcfoundation.org/) are implemented in the OPC UA .NET Standard Stack, and where in the codebase / documentation each one lives.
|
|
|
|
## Overview
|
|
|
|
The OPC UA .NET Standard Stack is a reference implementation that targets
|
|
**OPC UA specification version 1.05.07**. Historical reference-server
|
|
certification does not certify every current SDK feature, companion model or
|
|
application. Use the implementation and provider limits below, the exact
|
|
product's advertised capabilities, and its version-specific certification scope.
|
|
|
|
The SDK ships implementations and helpers for:
|
|
|
|
- Part 1 (Overview and Concepts)
|
|
- Part 2 (Security Model)
|
|
- Part 3 (Address Space Model)
|
|
- Part 4 (Services)
|
|
- Part 5 (Information Model)
|
|
- Part 6 (Mappings)
|
|
- Part 7 (Profiles)
|
|
- Part 8 (Data Access)
|
|
- Part 9 (Alarms & Conditions)
|
|
- [Part 10 (Programs)](Programs.md)
|
|
- Part 11 (Historical Access)
|
|
- Part 12 (Discovery and Global Services, including LDS/GDS)
|
|
- Part 13 (Aggregates)
|
|
- Part 14 (PubSub)
|
|
- Part 16 (State Machines)
|
|
- Part 17 (Alias Names)
|
|
- Part 18 (Role Management)
|
|
- Part 20 (File Transfer)
|
|
- Part 21 registrar ticket administration (not a complete device-onboarding state machine)
|
|
- Part 100 (Device Integration / Software Update)
|
|
- OPC 10100-1 (WoT Connectivity)
|
|
- OPC 10000-200 (Industrial Automation)
|
|
- OPC 10000-110 (Asset Management Basics)
|
|
- OPC 40001-1/-2/-3/-4/-101 (Machinery)
|
|
- OPC 40010-1 (Robotics)
|
|
- OPC 40100-1/-2 (Machine Vision)
|
|
- OPC 40200 (Weighing Technology), OPC 40223 (Pumps and Vacuum Pumps)
|
|
- OPC 40501-1 (MachineTool), with OPC 40505 (Wireless Machine Tool Peripherals)
|
|
- OPC 40210 (Geometric Measurement Systems), with the Production-facet exception below
|
|
- OPC 40020-1 (Cranes and Hoists)
|
|
|
|
See
|
|
[What's New in 2.0](WhatsNewIn2.0.md) for the broader change narrative.
|
|
|
|
The canonical list of OPC UA profile and facet URIs is maintained by the
|
|
OPC Foundation at <https://profiles.opcfoundation.org/>. Listing an interface
|
|
or URI here does not mean every reference-server configuration advertises it.
|
|
Inspect the actual endpoint descriptions, `ServerProfileArray` and contributed
|
|
conformance units. Do not derive a profile URI from a package or feature name.
|
|
|
|
## Contents
|
|
|
|
- [Overview](#overview)
|
|
- [Server Profiles](#server-profiles)
|
|
- [Core Server Profiles](#core-server-profiles)
|
|
- [Functional Facets](#functional-facets)
|
|
- [Local Discovery Server (LDS) Profile](#local-discovery-server-lds-profile)
|
|
- [Additional facets supported by the implementation (beyond the default advertised set)](#additional-facets-supported-by-the-implementation-beyond-the-default-advertised-set)
|
|
- [Companion and extension models](#companion-and-extension-models)
|
|
- [Client Profiles](#client-profiles)
|
|
- [Transport Profiles](#transport-profiles)
|
|
- [Client and server transports](#client-and-server-transports)
|
|
- [PubSub transports](#pubsub-transports)
|
|
- [Security Profiles](#security-profiles)
|
|
- [RSA-based security policies](#rsa-based-security-policies)
|
|
- [ECC-based security policies](#ecc-based-security-policies)
|
|
- [Traditional ECC curves](#traditional-ecc-curves)
|
|
- [Modern ECC curves (v2.0)](#modern-ecc-curves-v20)
|
|
- [AES-GCM and ChaCha20-Poly1305 variants (v2.0)](#aes-gcm-and-chacha20-poly1305-variants-v20)
|
|
- [RSA Diffie-Hellman (v2.0)](#rsa-diffie-hellman-v20)
|
|
- [Deprecated security policies](#deprecated-security-policies)
|
|
- [Security policy None](#security-policy-none)
|
|
- [User Authentication](#user-authentication)
|
|
- [Certificate Types](#certificate-types)
|
|
- [RSA certificates](#rsa-certificates)
|
|
- [ECC certificates](#ecc-certificates)
|
|
- [Global Discovery Server (GDS)](#global-discovery-server-gds)
|
|
- [Message Encoding](#message-encoding)
|
|
- [Specification Compliance](#specification-compliance)
|
|
- [Configuration](#configuration)
|
|
- [Server profile configuration](#server-profile-configuration)
|
|
- [Contributed profiles and conformance units](#contributed-profiles-and-conformance-units)
|
|
- [Security policy configuration](#security-policy-configuration)
|
|
- [Related Documentation](#related-documentation)
|
|
- [Core and companion spec related documentation](#core-and-companion-spec-related-documentation)
|
|
- [References](#references)
|
|
|
|
## Server Profiles
|
|
|
|
The reference server (`samples/Reference/ConsoleReferenceServer`) advertises the
|
|
following profiles in its `ServerProfileArray`:
|
|
|
|
### Core Server Profiles
|
|
|
|
- **[Standard UA Server Profile (2017)](http://opcfoundation.org/UA-Profile/Server/StandardUA2017)** — The core OPC UA Server profile that includes:
|
|
- Basic server capabilities
|
|
- Discovery services
|
|
- Session management
|
|
- Subscription management
|
|
- MonitoredItem services
|
|
- View services (Browse, BrowseNext, TranslateBrowsePathsToNodeIds)
|
|
- Attribute services (Read, Write, HistoryRead, HistoryUpdate)
|
|
- Query services
|
|
|
|
### Functional Facets
|
|
|
|
- **[Data Access Server Facet](http://opcfoundation.org/UA-Profile/Server/DataAccess)** — Variables, data types, and data-change notifications.
|
|
- **[Method Server Facet](http://opcfoundation.org/UA-Profile/Server/Methods)** — Method calls on objects in the address space.
|
|
- **[Reverse Connect Facet](http://opcfoundation.org/UA-Profile/Server/ReverseConnect)** — Server-initiated connections to a client (see [Reverse Connect documentation](ReverseConnect.md)).
|
|
- **[Client Redundancy Facet](http://opcfoundation.org/UA-Profile/Server/ClientRedundancy)** — Subscription transfer between sessions/servers; see [Transfer Subscriptions](TransferSubscription.md).
|
|
- **Historical Access (15 released 2022 Server facets)** — the ReferenceServer
|
|
capability-gates and advertises:
|
|
- [Raw Data](http://opcfoundation.org/UA-Profile/Server/HistoricalRawData2022)
|
|
- [Modified Data](http://opcfoundation.org/UA-Profile/Server/HistoricalModifiedData2022)
|
|
- [AtTime](http://opcfoundation.org/UA-Profile/Server/HistoricalDataAtTime2022)
|
|
- [Aggregate](http://opcfoundation.org/UA-Profile/Server/AggregateHistorical2022)
|
|
- [Annotation](http://opcfoundation.org/UA-Profile/Server/HistoricalAnnotation2022)
|
|
- [Structured Data](http://opcfoundation.org/UA-Profile/Server/HistoricalStructuredData2022)
|
|
- [Raw Data Insert](http://opcfoundation.org/UA-Profile/Server/HistoricalDataInsert2022)
|
|
- [Raw Data Replace](http://opcfoundation.org/UA-Profile/Server/HistoricalDataReplace2022)
|
|
- [Raw Data Update](http://opcfoundation.org/UA-Profile/Server/HistoricalDataUpdate2022)
|
|
- [Raw Data Delete](http://opcfoundation.org/UA-Profile/Server/HistoricalDataDelete2022)
|
|
- [Event Read](http://opcfoundation.org/UA-Profile/Server/BaseHistoricalEvent2022)
|
|
- [Event Insert](http://opcfoundation.org/UA-Profile/Server/HistoricalEventInsert2022)
|
|
- [Event Replace](http://opcfoundation.org/UA-Profile/Server/HistoricalEventReplace2022)
|
|
- [Event Update](http://opcfoundation.org/UA-Profile/Server/HistoricalEventUpdate2022)
|
|
- [Event Delete](http://opcfoundation.org/UA-Profile/Server/HistoricalEventDelete2022)
|
|
|
|
See [Historical Access](HistoricalAccess.md) and
|
|
[Aggregates](Aggregates.md).
|
|
|
|
### Local Discovery Server (LDS) Profile
|
|
|
|
The `Opc.Ua.Lds.Server` library plus the `ConsoleLdsServer` reference
|
|
application implement the Local Discovery Server. The LDS application
|
|
advertises the **[Local Discovery Server 2017 Facet](http://opcfoundation.org/UA-Profile/Server/LocalDiscovery2017)**
|
|
(see `samples/Lds/ConsoleLdsServer/Lds.Server.Config.xml`).
|
|
|
|
### Additional facets supported by the implementation (beyond the default advertised set)
|
|
|
|
Beyond the default profiles advertised in the reference server's
|
|
`ServerProfileArray`, the master branch implements the following facets in
|
|
the SDK. They can be enabled per-application by registering the
|
|
corresponding NodeManager and, where applicable, adding the matching URI to
|
|
`ServerProfileArray` (consult <https://profiles.opcfoundation.org/> for the
|
|
canonical URI string before claiming a facet):
|
|
|
|
- **Alarms and Conditions** (Part 9) — Full server-side implementation
|
|
with latched / silenced / out-of-service alarms, alarm groups, a
|
|
suppression engine, and rate metrics. The reference server's
|
|
`AlarmNodeManager` exposes a working sample. See
|
|
[Alarms and Conditions](AlarmsAndConditions.md).
|
|
- **State Machine** (Part 16) — `StateMachineBuilder` and the
|
|
`FluentFiniteStateMachineState` extensibility in
|
|
`src/Opc.Ua.Server/StateMachines/`. The reference server's
|
|
`BoilerStateMachineState` is an end-to-end sample. See
|
|
[State Machines](StateMachines.md).
|
|
- **File Access** (Part 20) — Server-side `FileSystemNodeManager` +
|
|
`IFileSystemProvider` in `src/Opc.Ua.Server/FileSystem/`. The
|
|
reference server enables it via the `EnableFileSystemNodeManager`
|
|
option. The matching System.IO-style client lives in
|
|
[`FileSystemClient`](FileSystemClient.md).
|
|
- **Node Management** (Part 4 service set) —
|
|
`INodeManagementAsyncNodeManager` opt-in plus a per-NodeManager
|
|
`AllowNodeManagement` gate for `AddNodes` / `DeleteNodes` /
|
|
`AddReferences` / `DeleteReferences`. See
|
|
[Node Management](NodeManagement.md).
|
|
- **Alias Names** (Part 17) — `AliasNameStore` and the optional
|
|
`AliasNameNodeManager` for `AliasNameCategory` / `FindAlias` /
|
|
`FindAliasVerbose` / `AddAliasesToCategory` / `DeleteAliasesFromCategory`
|
|
/ `LastChange`. The reference server wires the standard Aliases and
|
|
Topics nodes via `ConfigureAliasNameStore`. See
|
|
[Alias Names](AliasNames.md).
|
|
- **WoT Connectivity** (OPC 10100-1) — `Opc.Ua.WotCon` /
|
|
`Opc.Ua.WotCon.Server` / `Opc.Ua.WotCon.Client` library trio for
|
|
surfacing OPC UA servers as Web-of-Things Thing Descriptions. See
|
|
[WoT Connectivity](WoTConnectivity.md).
|
|
- **Device Integration** (Part 100) — `Opc.Ua.Di` / `Opc.Ua.Di.Server` /
|
|
`Opc.Ua.Di.Client` library trio, including the lock service and the
|
|
software-update package store. See [Device Integration](DeviceIntegration.md)
|
|
and [Software Update](SoftwareUpdate.md).
|
|
- **Relative Spatial Location and Global Positioning** (Parts 210 and 211) —
|
|
`Opc.Ua.Positioning` / `Opc.Ua.Positioning.Server` /
|
|
`Opc.Ua.Positioning.Client` implement the released RSL and GPOS models,
|
|
including RSL spatial lists and model changes plus the GPOS GlobalPosition,
|
|
GlobalLocation, and Zones conformance units. See
|
|
[Positioning](Positioning.md).
|
|
- **Robotics** (OPC 40010-1) over **Industrial Automation** (OPC 10000-200) —
|
|
`Opc.Ua.Robotics` / `Opc.Ua.Robotics.Server` / `Opc.Ua.Robotics.Client`
|
|
library trio implementing the released Robotics 1.02 model over IA and
|
|
Device Integration, with validated fluent topology builders for motion
|
|
device systems, controllers, motion devices, axes, power trains, motors,
|
|
gears, drives, safety states, and task controls. See
|
|
[Robotics](Robotics.md).
|
|
- **Role Management** (Part 18) — Server-side role administration plus a
|
|
pluggable [identity-provider model](IdentityProviders.md) for anonymous,
|
|
username, X.509, and token-issuer flows. The server automatically
|
|
assigns the OPC UA Part 3 §4.9 `TrustedApplication` role; see also
|
|
[Role-Based User Management](RoleBasedUserManagement.md).
|
|
- **Auditing** — The server raises audit events for security-relevant
|
|
service calls (channel/secure-channel/session/activate/cancel). The
|
|
audit and redaction APIs are provided by `Opc.Ua.Server`.
|
|
- **Model Change Tracking** — Server-side `ModelChangeAggregator` with
|
|
auto-emitted `GeneralModelChangeEvent` from `CustomNodeManager`;
|
|
client-side per-node `INodeCache.InvalidateNode`. See
|
|
[Model Change Tracking](ModelChangeTracking.md).
|
|
- **Durable Subscriptions** — Subscriptions that persist across reconnects.
|
|
See [Durable Subscriptions](DurableSubscription.md).
|
|
- **Complex Types** — Custom structures and enumerations; see
|
|
[Complex Types](ComplexTypes.md).
|
|
- **Async server NodeManagers** — TAP-based `AsyncCustomNodeManager` is the
|
|
recommended base for new NodeManagers, and every NodeManager shipped with
|
|
the stack has migrated to it. See [Async Server Support](AsyncServerSupport.md).
|
|
- **Session-less invocation** (Part 4 §6.3) - opt-in invocation of the permitted
|
|
service sets through the existing identity/authorization pipeline; this does
|
|
not enable session-less subscriptions. See [Session-less invocation](SessionlessInvocation.md).
|
|
- **Final-value publication before node removal** - a node manager can await
|
|
inclusion of final values in server Publish responses before retiring dynamic
|
|
nodes. This is an SDK lifecycle facility, not a separately certified profile
|
|
or transport-acknowledgment guarantee. See
|
|
[Node managers](NodeManagers.md#final-value-publication-before-node-removal).
|
|
- **Server redundancy (Part 4 §6.6)** — `AddServerRedundancy(...)` publishes
|
|
the `Server.ServerRedundancy` object, drives `Server.ServiceLevel`, and
|
|
supports every `RedundancySupport` mode (None / Cold / Warm / Hot /
|
|
HotAndMirrored / Transparent). Non-transparent modes advertise the **`NTRS`**
|
|
discovery capability and return the peer set from `FindServers`;
|
|
`RequestServerStateChange` supports administrator-driven Maintenance / NoData
|
|
failover. Opt-in distributed high availability — address-space, session, and
|
|
subscription mirroring over an in-package CRDT (eventual) or Raft (strong)
|
|
shared store, plus a Kubernetes deployment — is provided by the
|
|
`Opc.Ua.Redundancy`, `.Server`, `.Client`, and `.Kubernetes` packages. See
|
|
[High Availability](HighAvailability.md).
|
|
|
|
## Companion and extension models
|
|
|
|
This is the SDK implementation catalogue, not a list of facets enabled in every
|
|
server. Generated model coverage, provider-backed runtime behavior, advertised
|
|
conformance and external certification are different claims. Use each guide's
|
|
limitations and the actual configured instance before claiming a facet.
|
|
|
|
| Model or family | Implemented support | Conditions and limits |
|
|
| --- | --- | --- |
|
|
| [Device Integration](DeviceIntegration.md), OPC 10000-100 | Device composition, locking and software-update server/client interfaces | Equipment and storage behavior use application providers |
|
|
| [Asset Management Basics](AMB.md), OPC 10000-110 | Asset discovery/identity, health, maintenance, documentation and location | Sidecar registry composes with the asset's existing namespace owner |
|
|
| [Industrial Automation](Robotics.md), OPC 10000-200 | Shared generated IA model used by companion builders | Loading the model does not by itself implement every IA facet |
|
|
| [Machinery](Machinery.md), OPC 40001-1/-2/-3/-4/-101 | Building blocks, process values, jobs, energy and result-transfer runtime/client interfaces | Select capabilities and providers; durable result storage is application-supplied |
|
|
| [MachineTool and WMTP](MachineTool.md), OPC 40501-1 and OPC 40505 | Native monitoring, tools, retained/modern production, files, peripheral measurements/configuration/records and typed clients/MCP | WMTP is bundled but independently modeled; no included Bluetooth driver or physical CNC executor |
|
|
| [GMS](GMS.md), OPC 40210 | Native systems, sensors/qualification, calibration observations, jobs/parts and Machinery-backed results | Full GMS Production facet is withheld because its required `GMS_ProductionStatisticsType` is undefined upstream; no invented acquisition/calibration-control methods |
|
|
| [Cranes and Hoists](CranesHoists.md), OPC 40020-1 | Robotics-derived topology, load/protection observations and provider-authorized limit requests | Preview-only packages; not a motion or safety controller |
|
|
| [Pumps](Pumps.md), OPC 40223 | Released model, fluent device builders and typed clients | Actual equipment observations and effects require providers |
|
|
| [Scales](Scales.md), OPC 40200 | Weighing, zero/tare, products, statistics, recipes, PackML and typed clients | Stock runtime withholds Catchweigher, AutomaticWeightPriceLabeler and TotalizingHopper kind facets; application recipe execution/parser remains explicit |
|
|
| [ISA-95](ISA95.md), OPC 10030 and OPC 10031-4 | Common resource model and Job Control V1/V2 providers, server bindings and clients | Providers supply actual execution, catalogs and responses |
|
|
| [Positioning](Positioning.md), OPC 10000-210/-211 | Released RSL/GPOS models, spatial lists, model changes, position/location/zones interfaces | Positioning packages remain preview-only; do not infer GNSS hardware support |
|
|
| [Robotics](Robotics.md), OPC 40010-1 | Released motion-device topology and supported controller/program interfaces | Preview-only package policy is independent from the released Robotics model |
|
|
| [Machine Vision](Vision.md), OPC 40100-1/-2 | Released control/configuration/recipe/result and asset/condition-monitoring interfaces, clients and MCP | Providers supply acquisition and equipment behavior; separate from Perception |
|
|
| [Perception](Vision.md#perception-model) and [Robot Intent](Robotics.md#robot-intent) | Perception/media/inference/feedback and robot task-intent implementations | Draft models with provisional identifiers, not released-companion conformance claims |
|
|
| [AI](AI.md), [xRegistry](XRegistry.md), [OpenUSD](OpenUsd.md) | Model/deployment/inference services, registry/version/federation and scene/address-space integration | Draft extension models; preview-only families, with provider/backend-specific limits |
|
|
| [WoT Connectivity](WoTConnectivity.md) | OPC 10100-1 interfaces and WoT conversion/binding implementations | Preview package policy; registry extensions and transport-specific bindings have separate scope |
|
|
| [PA-DIM/ECM](Machinery.md) and [PackML](Scales.md) | Shared generated dependency models and the behavior bound by Machinery/Scales | Not a blanket standalone device or all-facet implementation claim |
|
|
|
|
Package preview status is governed by [the release policy](ReleaseProcess.md#terms),
|
|
not by a specification's publication date. The MachineTool/GMS and released
|
|
Vision package families follow the root version; CranesHoists remains
|
|
preview-only. Draft identifiers are not promoted to standard identifiers by
|
|
shipping a package.
|
|
|
|
## Client Profiles
|
|
|
|
The client (`Opc.Ua.Client`) supports the standard UA Client functionality
|
|
through two coexisting paths:
|
|
|
|
- **Classic `Session`** — the lowest-level OPC UA session primitive,
|
|
paired with `SessionReconnectHandler` for caller-driven reconnect.
|
|
- **`ManagedSession`** — recommended for new code. Encapsulates the
|
|
connection state machine, reconnect policy, and pluggable subscription
|
|
engine behind a fluent builder. See [Sessions, Reconnection, and
|
|
Subscription Engines](Sessions.md).
|
|
|
|
Client-side feature coverage:
|
|
|
|
- **Subscriptions and monitored items** — Both the classic publish
|
|
engine and the V2 subscription engine (`ISubscriptionManager` /
|
|
`DefaultSubscriptionEngine`) are supported and selectable per session.
|
|
The V2 surface includes a declarative + imperative
|
|
[`SetTriggering`](Subscriptions.md#triggering-settriggering) API with
|
|
N:M support and automatic replay on recreate / reconnect, plus an
|
|
`IStreamingSubscription` (`IAsyncEnumerable`-based) facade for
|
|
state-machine waits and short-lived monitoring
|
|
(`ManagedSession.DefaultStreaming`, `TakeUntilAsync` /
|
|
`WithTimeoutAsync` helpers). See
|
|
[Subscriptions and Monitored Items](Subscriptions.md).
|
|
- **Transfer Subscriptions** — Subscription transfer between servers;
|
|
see [Transfer Subscriptions](TransferSubscription.md). An opt-in
|
|
`SubscriptionRecoveryPolicy` lets the client tolerate
|
|
`Good_SubscriptionTransferred` notifications from the server.
|
|
- **Reverse Connect** — Client can accept connections initiated by the
|
|
server; see [Reverse Connect](ReverseConnect.md).
|
|
- **Model Change Tracking** — Client-side per-node cache invalidation
|
|
driven by server-emitted model-change events; see
|
|
[Model Change Tracking](ModelChangeTracking.md).
|
|
- **File System Operations** — Async, `System.IO`-style client over OPC
|
|
UA file methods; see [FileSystemClient](FileSystemClient.md).
|
|
- **Alarms and Conditions** — Typed `AlarmClient` event records, fluent
|
|
`AlarmEventFilterBuilder`, and `IAsyncEnumerable` alarm streaming via
|
|
`AlarmStreamExtensions`; see
|
|
[Alarms and Conditions](AlarmsAndConditions.md).
|
|
- **Historical Access** — `HistoryClient` (`session.Historian()`) for
|
|
raw, modified (including `ModificationInfo`), at-time, processed
|
|
(aggregate), annotation, and event history reads / updates; see
|
|
[Historical Access](HistoricalAccess.md).
|
|
- **State Machines** — Streaming and read helpers
|
|
(`GetCurrentFiniteStateAsync`, `ObserveFiniteTransitionsAsync`,
|
|
`WaitForStateAsync`) on the source-generated `*TypeClient` proxies;
|
|
see [State Machines](StateMachines.md).
|
|
- **NodeSet Export** — Extract a server's address space to NodeSet2 XML;
|
|
see [NodeSet Export](NodeSetExport.md).
|
|
- **Source-generated typed proxies** — `*TypeClient` proxies for
|
|
ObjectTypes inside loaded models give strongly-typed method-call
|
|
signatures; see [Source-Generated NodeManagers](NodeManagers.md#source-generated-node-managers).
|
|
- **Complex types** — Decode and consume server-defined structures and
|
|
enumerations on the client; see [Complex Types](ComplexTypes.md).
|
|
- **Generation-bound session clients** - capture a transport/session generation
|
|
and namespace mappings; invalidated bindings reject requests instead of
|
|
retargeting them after reconnect. This is an additive SDK capability, not a
|
|
separate conformance profile. See [Session bindings](SessionBindings.md).
|
|
- **Typed companion workflows** - the model families above include their
|
|
documented discovery, read, operation and observation helpers. Companion
|
|
and general stack workflows are also exposed through bounded
|
|
[MCP profiles](McpServer.md), with separate host grants for privileged/live
|
|
execution. MCP catalogue selection is neither an execution grant nor an
|
|
OPC UA Client conformance profile.
|
|
|
|
## Transport Profiles
|
|
|
|
The stack implements the following transport profiles:
|
|
|
|
### Client and server transports
|
|
|
|
- **[UA TCP Transport](http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary)** (`opc.tcp://`) — Primary OPC UA binary transport over TCP.
|
|
- Full UA Secure Conversation (UASC)
|
|
- Binary encoding
|
|
- Reverse-connect capability
|
|
|
|
- **[HTTPS Binary Transport](http://opcfoundation.org/UA-Profile/Transport/https-uabinary)** (`opc.https://` and `https://`) — OPC UA binary protocol over HTTPS with TLS.
|
|
|
|
- **[HTTPS JSON Transport](http://opcfoundation.org/UA-Profile/Transport/https-uajson)** (`opc.https://` and `https://`) - OPC UA JSON (compact / reversible) over HTTPS (OPC UA Part 6 §7.4.5)
|
|
- Compact JSON encoding (`application/opcua+uajson`)
|
|
- TLS/SSL encryption only — no UA SecureChannel layer
|
|
- Restricted to `MessageSecurityMode.None`; transport security is provided exclusively by TLS
|
|
|
|
- **[WebSocket Secure (UA Binary)](http://opcfoundation.org/UA-Profile/Transport/wss-uasc-uabinary)** (`opc.wss://` and `wss://`) - UA Binary + UASC over secure WebSockets (OPC UA Part 6 §7.5.2, sub-protocol `opcua+uacp`)
|
|
- Same UASC SecureChannel pipeline as `opc.tcp` carried over WebSocket binary frames (one frame per MessageChunk)
|
|
- Supports all security modes (None / Sign / SignAndEncrypt)
|
|
- TLS/SSL encryption at the WebSocket layer
|
|
|
|
- **[WebSocket Secure (JSON)](http://opcfoundation.org/UA-Profile/Transport/wss-uajson)** (`opc.wss://` and `wss://`) - OPC UA JSON over secure WebSockets (Part 6 §7.5.2, sub-protocol `opcua+uajson`)
|
|
- Compact JSON encoding per WebSocket text frame
|
|
- TLS/SSL encryption only — no UA SecureChannel layer
|
|
- Restricted to `MessageSecurityMode.None`
|
|
|
|
- **[HTTPS OpenAPI](https://profiles.opcfoundation.org/profile/2338)** (`opc.https://` and `https://`) - OPC UA OpenAPI Mapping (Part 6 §G.3) — official OPC Foundation profile/2338, URI `http://opcfoundation.org/UA-Profile/Transport/https-uajson-openapi`
|
|
- Path-routed REST surface: `POST /<service>` (e.g. `/read`, `/browse`, `/createsubscription`)
|
|
- Body is the bare `<Service>Request` / `<Service>Response` — no `{UaTypeId, UaBody}` envelope at the HTTPS layer
|
|
- Compact (default, mandatory per §5.4.9) and Verbose JSON flavours selected via the `application/json; encoding=compact|verbose` media-type parameter
|
|
- TLS/SSL encryption only — no UA SecureChannel layer
|
|
- Restricted to `MessageSecurityMode.None`
|
|
- Authentication via Anonymous, Bearer JWT, HTTP Basic, or Mutual TLS (see [WebApi.md](WebApi.md))
|
|
- Server-side discovery emission: `HttpsServiceHost` emits this sub-profile as a discovery-only twin alongside each `SecurityMode.None` HTTPS-binary endpoint, so discovery-driven clients can find the OpenAPI endpoint without hard-coding the URL.
|
|
- Shipped as part of the `OPCFoundation.NetStandard.Opc.Ua.Bindings.Https` package (net8+ only)
|
|
- Surfaced via `Profiles.HttpsOpenApiTransport`
|
|
|
|
- **[WSS OpenAPI](https://profiles.opcfoundation.org/profile/2339)** (`opc.wss://` and `wss://`) - OPC UA OpenAPI Mapping over secure WebSockets (Part 6 §7.5.2, sub-protocol `opcua+openapi` / `opcua+openapi+<accesstoken>`) — official OPC Foundation profile/2339, URI `http://opcfoundation.org/UA-Profile/Transport/wss-uajson-openapi`
|
|
- Same on-wire `{TypeId, Body}` OPC UA JSON envelope as `opcua+uajson`, multiplexed over WebSocket text frames; distinguished by the negotiated sub-protocol and the advertised TransportProfileUri
|
|
- Bearer-token variant negotiates the access token in the sub-protocol name (no `Authorization` header — required for browser fetch compatibility); the server extracts the token from the sub-protocol name and feeds it through the standard `ISessionlessIdentityProvider` pipeline
|
|
- Server-side discovery emission: the WSS factories emit this sub-profile as a discovery-only twin alongside each `SecurityMode.None` WSS binary endpoint, mirroring the HTTPS OpenAPI emission.
|
|
- Client surface: `src/Opc.Ua.Client/WebApi/WebApiWssTransportChannel.cs`; fluent shortcut `ManagedSessionBuilder.UseWssOpenApiEndpoint(url)`; DI registration via `services.AddWebApiTransportChannel()` (registers both HTTPS and WSS WebApi channel factories).
|
|
- Surfaced via `Profiles.WssOpenApiTransport`
|
|
|
|
### PubSub transports
|
|
|
|
The [PubSub library](PubSub.md) supports the following PubSub transport
|
|
facets (URIs surfaced by `Profiles.PubSub*Transport` constants in
|
|
`src/Opc.Ua.Core/Security/Constants/SecurityConstants.cs`). Facet
|
|
machinery and conformance unit semantics are defined by
|
|
[Part 7 §4.3](https://reference.opcfoundation.org/specs/OPC-10000-7/v1.05.06/4.3).
|
|
|
|
- **[PubSub UDP UADP](http://opcfoundation.org/UA-Profile/Transport/pubsub-udp-uadp)** — UDP transport with UADP message encoding.
|
|
- **[PubSub Ethernet UADP](http://opcfoundation.org/UA-Profile/Transport/pubsub-eth-uadp)** — Ethernet (Layer 2) transport with UADP message encoding (see [PubSub transports](PubSub.md#transports)).
|
|
- **[PubSub MQTT UADP](http://opcfoundation.org/UA-Profile/Transport/pubsub-mqtt-uadp)** — MQTT transport with UADP message encoding.
|
|
- **[PubSub MQTT JSON](http://opcfoundation.org/UA-Profile/Transport/pubsub-mqtt-json)** — MQTT transport with JSON message encoding.
|
|
- **[PubSub Kafka UADP](http://opcfoundation.org/UA-Profile/Transport/pubsub-kafka-uadp)**
|
|
and **[PubSub Kafka JSON](http://opcfoundation.org/UA-Profile/Transport/pubsub-kafka-json)** -
|
|
Part 14 Annex B.2 broker mapping through `Opc.Ua.PubSub.Kafka`; see
|
|
[Kafka transport and backend limits](PubSub.md#apache-kafka).
|
|
- **DTLS over UDP** - supported registered profiles use the UDP transport's
|
|
platform/cryptographic capabilities; Curve25519/Curve448 DTLS profiles are
|
|
not registered. See [PubSub security limits](PubSub.md#security).
|
|
- **Datagram-v2 connection profile** —
|
|
[`DatagramConnectionTransport2DataType`](https://reference.opcfoundation.org/specs/OPC-10000-14/v1.05.06/6.4.1.4)
|
|
(Part 14 §6.4.1.4) is honoured for UDP transports. The
|
|
`DiscoveryAnnounceRate`, `DiscoveryMaxMessageSize`, and `QosCategory`
|
|
fields drive discovery cadence and the IP DSCP TOS byte.
|
|
- **PubSub SKS pull / push** —
|
|
[Part 14 §8.5.1](https://reference.opcfoundation.org/specs/OPC-10000-14/v1.05.06/8.5.1)
|
|
/ §8.5.2: the
|
|
`AddPubSubSecurityKeyServiceClient` extension implements the pull
|
|
client (calls `GetSecurityKeys` on a remote SKS), and
|
|
`AddPubSubSecurityKeyServiceServer` hosts the in-memory SKS with
|
|
`Get/SetSecurityKeys` and `AddSecurityGroup` methods bound on the
|
|
address space.
|
|
- **AES-128-CTR / AES-256-CTR with HMAC-SHA-256** —
|
|
[Part 14 §8.4.3](https://reference.opcfoundation.org/specs/OPC-10000-14/v1.05.06/8.4.3)
|
|
message security. Profiles registered as
|
|
`PubSubAes128CtrPolicy` / `PubSubAes256CtrPolicy`; conformance to NIST
|
|
SP 800-38A F.5.1 / F.5.5 is asserted by the test suite.
|
|
- **Anonymous certificate-based MQTT auth** — the MQTT transport
|
|
exposes the `MqttClientAuthenticationOptions` with the
|
|
certificate-based variant from
|
|
[Part 14 §6.4.2.2.4](https://reference.opcfoundation.org/specs/OPC-10000-14/v1.05.06/6.4.2.2.4).
|
|
|
|
PubSub additionally supports certificate-based MQTT authentication and
|
|
considers `WriterGroup`s in MQTT keep-alive calculations.
|
|
|
|
All transport profiles defined in OPC UA Part 6 §7.4 (HTTPS) and §7.5
|
|
(WebSockets) are supported, including the `opcua+openapi` and
|
|
`opcua+openapi+<accesstoken>` WebSocket sub-protocols (Part 6 §7.5.2
|
|
Table 81).
|
|
|
|
## Security Profiles
|
|
|
|
The stack supports the following security profiles for secure
|
|
communication. The canonical set is defined in
|
|
`src/Opc.Ua.Core/Security/Constants/SecurityPolicies.cs`.
|
|
|
|
### RSA-based security policies
|
|
|
|
- **[Basic256Sha256](http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256)**
|
|
- 256-bit AES encryption
|
|
- RSA-OAEP for key encryption
|
|
- HMAC-SHA256 for message authentication
|
|
- Minimum key size: 2048 bits
|
|
- **[Aes128_Sha256_RsaOaep](http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep)**
|
|
- 128-bit AES encryption
|
|
- RSA-OAEP for key encryption
|
|
- HMAC-SHA256 for message authentication
|
|
- **[Aes256_Sha256_RsaPss](http://opcfoundation.org/UA/SecurityPolicy#Aes256_Sha256_RsaPss)**
|
|
- 256-bit AES encryption
|
|
- RSA-PSS signatures
|
|
- HMAC-SHA256 for message authentication
|
|
|
|
### ECC-based security policies
|
|
|
|
ECC support is documented in detail in [ECC Profiles](EccProfiles.md).
|
|
|
|
#### Traditional ECC curves
|
|
|
|
- **[ECC_nistP256](http://opcfoundation.org/UA/SecurityPolicy#ECC_nistP256)** — NIST P-256 with SHA-256
|
|
- **[ECC_nistP384](http://opcfoundation.org/UA/SecurityPolicy#ECC_nistP384)** — NIST P-384 with SHA-384
|
|
- **[ECC_brainpoolP256r1](http://opcfoundation.org/UA/SecurityPolicy#ECC_brainpoolP256r1)** — Brainpool P-256r1 with SHA-256
|
|
- **[ECC_brainpoolP384r1](http://opcfoundation.org/UA/SecurityPolicy#ECC_brainpoolP384r1)** — Brainpool P-384r1 with SHA-384
|
|
|
|
#### Modern ECC curves (v2.0)
|
|
|
|
- **[ECC_curve25519](http://opcfoundation.org/UA/SecurityPolicy#ECC_curve25519)** — Curve25519 with ChaCha20-Poly1305
|
|
- **[ECC_curve25519_AesGcm](http://opcfoundation.org/UA/SecurityPolicy#ECC_curve25519_AesGcm)** — Curve25519 with AES-GCM
|
|
- **[ECC_curve448](http://opcfoundation.org/UA/SecurityPolicy#ECC_curve448)** — Curve448 with ChaCha20-Poly1305
|
|
- **[ECC_curve448_AesGcm](http://opcfoundation.org/UA/SecurityPolicy#ECC_curve448_AesGcm)** — Curve448 with AES-GCM
|
|
|
|
#### AES-GCM and ChaCha20-Poly1305 variants (v2.0)
|
|
|
|
Modern AEAD cipher alternatives for traditional ECC curves:
|
|
|
|
- **ECC_nistP256_AesGcm**, **ECC_nistP256_ChaChaPoly**
|
|
- **ECC_nistP384_AesGcm**, **ECC_nistP384_ChaChaPoly**
|
|
- **ECC_brainpoolP256r1_AesGcm**, **ECC_brainpoolP256r1_ChaChaPoly**
|
|
- **ECC_brainpoolP384r1_AesGcm**, **ECC_brainpoolP384r1_ChaChaPoly**
|
|
|
|
#### RSA Diffie-Hellman (v2.0)
|
|
|
|
- **RSA_DH_AesGcm** — RSA Diffie-Hellman key agreement with AES-GCM
|
|
- **RSA_DH_ChaChaPoly** — RSA Diffie-Hellman key agreement with ChaCha20-Poly1305
|
|
|
|
**Platform requirements for ECC.** Certificate creation, storage, and validation
|
|
are distinct from ECC SecureChannel and user-token security policies. On .NET 8.0 or
|
|
later those policies use the platform's raw ECDH agreement and authenticated ciphers;
|
|
on .NET Framework the agreement and the AES-GCM and ChaCha20-Poly1305 ciphers run in
|
|
the managed BouncyCastle implementation. Curve and cipher availability also depends on
|
|
the OS and, on .NET 8+, the runtime probes
|
|
(`AesGcm.IsSupported` / `ChaCha20Poly1305.IsSupported`). See the
|
|
[ECC platform limitations](EccProfiles.md#known-limitations) for the certificate-operation
|
|
and channel-policy boundaries. PubSub has its own
|
|
[transport security limits](PubSub.md#security).
|
|
|
|
### Deprecated security policies
|
|
|
|
The following security policies are deprecated but still supported for
|
|
backward compatibility:
|
|
|
|
- **[Basic256](http://opcfoundation.org/UA/SecurityPolicy#Basic256)** — uses SHA-1
|
|
- **[Basic128Rsa15](http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15)** — uses SHA-1 and RSA-PKCS#1 v1.5
|
|
|
|
**Note.** SHA-1 signed certificates are rejected by default
|
|
(`RejectSHA1SignedCertificates` configuration option). These deprecated
|
|
policies should only be enabled for compatibility with legacy systems.
|
|
|
|
### Security policy None
|
|
|
|
- **[None](http://opcfoundation.org/UA/SecurityPolicy#None)** — No security.
|
|
- For testing or isolated networks only.
|
|
- Not recommended for production environments.
|
|
|
|
## User Authentication
|
|
|
|
The stack supports the following user authentication mechanisms:
|
|
|
|
- **Anonymous** — No user authentication.
|
|
- **Username / Password** — User credentials encrypted using the active
|
|
security policy.
|
|
- **X.509 Certificate** — User authentication via X.509 certificates.
|
|
- **Issued Token** — Includes **JSON Web Tokens (JWT)** and other
|
|
IssuerEndpointUrl-driven flows (OAuth2 / OIDC / Entra). The
|
|
[Identity Providers](IdentityProviders.md) pluggable model
|
|
(`IClientIdentityProvider`, `IUserTokenAuthenticator`,
|
|
`IAccessTokenProvider`, `ITokenIssuer`, `IIdentityClaims`) is the
|
|
recommended way to wire these in.
|
|
|
|
## Certificate Types
|
|
|
|
The stack supports the following certificate types for application
|
|
authentication:
|
|
|
|
### RSA certificates
|
|
|
|
- **RsaSha256ApplicationCertificateType** — RSA with SHA-256 signatures
|
|
- Default minimum key size: 2048 bits
|
|
- Recommended for production use
|
|
|
|
### ECC certificates
|
|
|
|
- **EccNistP256ApplicationCertificateType**
|
|
- **EccNistP384ApplicationCertificateType**
|
|
- **EccBrainpoolP256r1ApplicationCertificateType**
|
|
- **EccBrainpoolP384r1ApplicationCertificateType**
|
|
|
|
The `RejectSHA1SignedCertificates` configuration option (on by default)
|
|
prevents SHA-1 signed certificates from being accepted. See
|
|
[Certificates](Certificates.md) and [Certificate Manager](CertificateManager.md)
|
|
for storage, ref-counted lifetime, and the segregated-interface design.
|
|
|
|
## Global Discovery Server (GDS)
|
|
|
|
The stack ships a Global Discovery Server implementation covering the following
|
|
OPC UA Part 12 areas:
|
|
|
|
- Application registration and discovery.
|
|
- Pull and Push certificate-management models, including pushing to
|
|
arbitrary certificate groups and custom certificate groups on the GDS
|
|
itself.
|
|
- Sub-CA revocation without auto-creating an empty CRL.
|
|
- Support for both RSA and ECC certificate types and CRLs.
|
|
- **[AuthorizationService](AuthorizationService.md)** (OPC 10000-12 §9) —
|
|
OAuth2-style `StartRequestToken` / `FinishRequestToken` issuance with a
|
|
pluggable `IAccessTokenProvider` / `ITokenIssuer`.
|
|
- **[KeyCredentialService](KeyCredentialService.md)** (OPC 10000-12 §8) —
|
|
Credential issuance for non-OPC UA services such as MQTT brokers and
|
|
REST APIs, backed by `IKeyCredentialRequestStore` / `ISecretStore`.
|
|
- **Registrar ticket administration** (OPC 10000-21) -
|
|
`OnboardingClient`, `ITicketStore` and the declared registrar methods.
|
|
This is not the complete device-facing onboarding state machine; see
|
|
[the implemented scope](GDS.md#opc-10000-21-onboardingclient).
|
|
|
|
See the [GDS Developer Guide](GDS.md) for the implemented facets, provider-dependent
|
|
features, partial support, and hosting integration. This is not a claim that every
|
|
optional Part 12 function is implemented or certified. The Local Discovery Server is a separate library
|
|
(`Opc.Ua.Lds.Server`) and reference application (`ConsoleLdsServer`) that
|
|
advertises the
|
|
[Local Discovery Server 2017](http://opcfoundation.org/UA-Profile/Server/LocalDiscovery2017)
|
|
facet.
|
|
|
|
## Message Encoding
|
|
|
|
The stack supports the following message encoding formats:
|
|
|
|
- **UA Binary** — OPC UA binary encoding (primary for UA-TCP and HTTPS).
|
|
- **UA XML** — OPC UA XML encoding (for configuration import / export and
|
|
PubSub Dataset XML).
|
|
- **UA JSON** — OPC UA JSON encoding for PubSub MQTT.
|
|
- **UADP** — UA Data Protocol for PubSub.
|
|
|
|
The 2.0 release ships a new JSON decoder / encoder, array / matrix
|
|
abstractions, and a first-class `ByteString` type. See the
|
|
[2.0 migration guide — Encoders and Complex Types](migrate/2.0.x/encoders.md#encoders-and-decoders)
|
|
for the encoder/decoder migration details and
|
|
[Complex Types](ComplexTypes.md) for client-side decode of
|
|
server-defined types.
|
|
|
|
## Specification Compliance
|
|
|
|
- **OPC UA Specification:** Version 1.05.07.
|
|
- **Certification:** Historical reference-server certification does not establish
|
|
certification of the current release or of an application built with the SDK.
|
|
Verify the certificate and tested profile scope for the exact product version.
|
|
- **Testing:** Automated repository tests provide implementation evidence, not a
|
|
substitute for certification. The [GDS conformance matrix](GDS.md)
|
|
explicitly distinguishes its test evidence from CTT results.
|
|
- **Companions and extensions:** The catalogue above records implemented
|
|
interfaces and explicit gaps, not automatic whole-specification conformance.
|
|
Selected instances, providers, endpoint security and actual advertised CUs
|
|
determine an application's claim; package channel is a separate policy.
|
|
- **Redundancy (Part 4 §6.6):** Server and client redundancy are implemented
|
|
(opt-in) — `RedundancySupport`, `Server.ServiceLevel`, non-transparent
|
|
(`ServerUriArray` / `RedundantServerArray`) and transparent (`CurrentServerId`)
|
|
modes, `RequestServerStateChange`, and client-side transparent failover via
|
|
`ManagedSession.WithServerRedundancy()`; see
|
|
[High Availability](HighAvailability.md).
|
|
|
|
## Configuration
|
|
|
|
### Server profile configuration
|
|
|
|
Server profiles are configured in the server configuration file using the
|
|
`ServerProfileArray` element. The reference server's default array is:
|
|
|
|
```xml
|
|
<ServerConfiguration>
|
|
<!-- see https://profiles.opcfoundation.org/ for the canonical list of profile and facet URIs -->
|
|
<ServerProfileArray>
|
|
<ua:String>http://opcfoundation.org/UA-Profile/Server/StandardUA2017</ua:String>
|
|
<ua:String>http://opcfoundation.org/UA-Profile/Server/DataAccess</ua:String>
|
|
<ua:String>http://opcfoundation.org/UA-Profile/Server/Methods</ua:String>
|
|
<ua:String>http://opcfoundation.org/UA-Profile/Server/ReverseConnect</ua:String>
|
|
<ua:String>http://opcfoundation.org/UA-Profile/Server/ClientRedundancy</ua:String>
|
|
</ServerProfileArray>
|
|
</ServerConfiguration>
|
|
```
|
|
|
|
To advertise additional facets (Historical Access, Aggregates, Alarms &
|
|
Conditions, File Access, Auditing, NodeManagement, State Machine, etc.)
|
|
look up the canonical URI for the facet on
|
|
<https://profiles.opcfoundation.org/> and add it to `ServerProfileArray`.
|
|
Only advertise a facet that the application genuinely implements — the
|
|
Compliance Test Tool will exercise every claimed facet. Bringing the
|
|
reference-server and CTT configs in line with the facets the stack
|
|
actually implements is tracked in
|
|
[#3875](https://github.com/OPCFoundation/UA-.NETStandard/issues/3875).
|
|
|
|
### Contributed profiles and conformance units
|
|
|
|
Node managers that implement `IConformanceContributor`, such as the
|
|
companion node managers, contribute the facets and conformance units they
|
|
actually wire. At startup the server registers them with the
|
|
`ConformanceUnitsManager` and publishes the aggregate to
|
|
`Server/ServerCapabilities/ConformanceUnits` and `ServerProfileArray`.
|
|
The startup lifecycle republishes after the actual endpoint descriptions are
|
|
installed, so security-dependent companion claims are evaluated against real
|
|
endpoint policies rather than a placeholder registry.
|
|
|
|
The manager keeps the registered contributors and reads them again on every
|
|
`PublishAsync`, because the ServerCapabilities describe the current
|
|
configuration of the server (OPC 10000-5 §6.3.2). A contributor whose
|
|
support changes at runtime calls `PublishAsync` afterwards (the manager is
|
|
`ServerInternalData.ConformanceUnitsManager`); a unit or profile
|
|
that no contributor reports any more is withdrawn. `Unregister` removes a
|
|
contributor. The profiles from the `ServerProfileArray` configuration are
|
|
always kept.
|
|
|
|
### Security policy configuration
|
|
|
|
Security policies are configured in the `SecurityPolicies` section:
|
|
|
|
```xml
|
|
<SecurityPolicies>
|
|
<ServerSecurityPolicy>
|
|
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
|
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</SecurityPolicyUri>
|
|
</ServerSecurityPolicy>
|
|
<ServerSecurityPolicy>
|
|
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
|
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Aes128_Sha256_RsaOaep</SecurityPolicyUri>
|
|
</ServerSecurityPolicy>
|
|
<!-- ECC security policies -->
|
|
<ServerSecurityPolicy>
|
|
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
|
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#ECC_nistP256</SecurityPolicyUri>
|
|
</ServerSecurityPolicy>
|
|
</SecurityPolicies>
|
|
```
|
|
|
|
See the [reference server configuration file](../samples/Reference/ConsoleReferenceServer/Quickstarts.ReferenceServer.Config.xml)
|
|
for a complete example, or the
|
|
[CTT configuration file](../samples/Reference/ConsoleReferenceServer/Ctt.ReferenceServer.Config.xml)
|
|
for the variant selected by `--ctt`.
|
|
|
|
## Related Documentation
|
|
|
|
- [What's New in 2.0](WhatsNewIn2.0.md) — Narrative tour of the
|
|
1.5.378 → 2.0 changes, grouped by theme and layer.
|
|
- [Migration Guide](MigrationGuide.md) — Prescriptive, per-API migration
|
|
reference.
|
|
- [Subscriptions and Monitored Items](Subscriptions.md) —
|
|
V2 `ISubscriptionManager`, declarative + imperative `SetTriggering`
|
|
(N:M, replay on recreate / reconnect), and `IStreamingSubscription`.
|
|
- [Async Server Support](AsyncServerSupport.md) — TAP-based
|
|
`AsyncCustomNodeManager` and the `IAsyncNodeManager` family.
|
|
- [Dependency Injection](DependencyInjection.md) — `services.AddOpcUa()`
|
|
and the `IOpcUaBuilder` hosting surface.
|
|
- [Native AOT](NativeAoT.md) — AOT publishing, AOT-clean source
|
|
generators, and the AOT test matrix.
|
|
|
|
### Core and companion spec related documentation
|
|
|
|
- [Alarms and Conditions](AlarmsAndConditions.md) (Part 9)
|
|
- [Historical Access](HistoricalAccess.md) (Part 11)
|
|
- [Aggregates](Aggregates.md) (Part 13)
|
|
- [State Machines](StateMachines.md) (Part 16)
|
|
- [Alias Names](AliasNames.md) (Part 17)
|
|
- [Role-Based User Management](RoleBasedUserManagement.md) (Part 18)
|
|
- [Identity Providers](IdentityProviders.md)
|
|
- [Authorization Service](AuthorizationService.md) (Part 12 §9)
|
|
- [Key Credential Service](KeyCredentialService.md) (Part 12 §8)
|
|
- [GDS Developer Guide](GDS.md) (Part 12 implemented, partial and provider-gated areas)
|
|
- [File System Client](FileSystemClient.md) (Part 20)
|
|
- [Device Integration](DeviceIntegration.md) (Part 100)
|
|
- [Relative Spatial Location and Global Positioning](Positioning.md)
|
|
(Parts 210 and 211)
|
|
- [Robotics](Robotics.md) (OPC 40010-1 over OPC 10000-200)
|
|
- [Software Update](SoftwareUpdate.md)
|
|
- [WoT Connectivity](WoTConnectivity.md) (OPC 10100-1)
|
|
- [Node Management](NodeManagement.md) (Part 4)
|
|
- [Asset Management Basics](AMB.md) (OPC 10000-110)
|
|
- [Machinery](Machinery.md) (OPC 40001 series, PA-DIM and ECM)
|
|
- [Pumps](Pumps.md) (OPC 40223)
|
|
- [Scales](Scales.md) (OPC 40200 and PackML)
|
|
- [ISA-95](ISA95.md) (OPC 10030 and OPC 10031-4)
|
|
- [MachineTool and WMTP](MachineTool.md) (OPC 40501-1 and OPC 40505)
|
|
- [Geometric Measurement Systems](GMS.md) (OPC 40210)
|
|
- [Cranes and Hoists](CranesHoists.md) (OPC 40020-1; preview packages)
|
|
- [Machine Vision and Perception](Vision.md) (released OPC 40100-1/-2 and a distinct draft model)
|
|
- [AI Model Management](AI.md), [xRegistry](XRegistry.md) and [OpenUSD](OpenUsd.md) (draft extensions)
|
|
- [Session-less invocation](SessionlessInvocation.md) (Part 4 §6.3)
|
|
- [Generation-bound session clients](SessionBindings.md)
|
|
- [PubSub](PubSub.md) (Part 14 transports and platform limits)
|
|
|
|
## References
|
|
|
|
- [OPC Foundation Profile Reporting](https://profiles.opcfoundation.org/) — canonical profile and facet URI registry.
|
|
- [OPC UA Specification](https://reference.opcfoundation.org/) — online reference for the OPC 10000 series.
|
|
- [OPC UA Compliance Test Tool (CTT)](https://opcfoundation.org/developer-tools/certification-test-tools/opc-ua-compliance-test-tool-uactt/) — official conformance test tool.
|