Files
UA-.NETStandard/samples/ConsoleReferenceClient/README.md
Julius Pfrommer 2fb20c06a2 Use standardized OPC UA WebSocket transport profile URIs (#4133)
The WSS transport constants used the unregistered uawss- prefix for the
UA-SecureConversation/UA-Binary and UA-JSON profiles.

Use the profile URIs registered by the OPC Foundation:

https://profiles.opcfoundation.org/profile/254
https://profiles.opcfoundation.org/profile/253

The WebSocket mappings and sub-protocols are specified in OPC UA Part 6
section 7.5.2:

https://reference.opcfoundation.org/Core/Part6/v105/docs/7.5.2

Update the transport-profile helpers, regression tests, and
documentation accordingly so endpoint discovery publishes identifiers
recognized by conforming OPC UA clients and servers.

Tests: dotnet test tests/Opc.Ua.Core.Tests/Opc.Ua.Core.Tests.csproj -f
net10.0 --filter FullyQualifiedName~TransportProfileHelpersTests (39
passed)

# 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._

## Related Issues

_Reference all GitHub issues this PR addresses. If there is no issue
yet, open one and link it here._

_If this is a relatively large or complex change, a design must have
been discussed in the related tracking issue and signed off (which
becomes the Architectural Decision Record (ADR))._

- Fixes #github-issue-number, ...

## Checklist

_Put an `x` in the boxes that apply. You can complete these step by step
after opening the PR._

- [x] 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.
- [ ] 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.
- [x] I have verified that my changes do not introduce (new) build or
analyzer warnings.
- [x] 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.
- [ ] I have addressed **all** PR feedback received.

Co-authored-by: Julius Pfrommer <julius.pfrommer@o6-automation.com>
2026-07-31 09:39:11 +02:00

3.5 KiB

OPC Foundation UA .NET Standard Reference Client

Introduction

The console reference client can be configured using several console parameters. Some of these parameters are explained in more detail below.

To see all available parameters call console reference client with the parameter -h.

Supported transport profiles

The client picks the wire transport automatically from the serverUrl scheme. The OPC UA spec aliases the URL scheme to the TransportProfileUri on the negotiated endpoint:

URL scheme TransportProfileUri OPC UA Part 6 reference
opc.tcp:// uatcp-uasc-uabinary §7.4.2
opc.https:// (or https://) with binary body https-uabinary §7.4.4
opc.https:// (or https://) with application/opcua+uajson body https-uajson §7.4.5
opc.wss:// (or wss://) with opcua+uacp sub-protocol wss-uasc-uabinary §7.5.2
opc.wss:// (or wss://) with opcua+uajson sub-protocol wss-uajson §7.5.2

Examples:

# UA-TCP (default)
dotnet ConsoleReferenceClient.dll opc.tcp://localhost:62541/Quickstarts/ReferenceServer

# WSS+uacp (binary UA SecureChannel over TLS WebSocket)
dotnet ConsoleReferenceClient.dll opc.wss://localhost:62543/Quickstarts/ReferenceServer

# HTTPS (binary)
dotnet ConsoleReferenceClient.dll opc.https://localhost:62543/Quickstarts/ReferenceServer

The reference server (ConsoleReferenceServer) advertises the opc.tcp://, opc.https:// and opc.wss:// endpoints by default; see docs/Transports.md for the full server configuration story (TLS certificates, mutual TLS, JSON sub-protocol restrictions, etc.).

Reverse Connect

The OPC UA reverse connect feature allows an OPC UA server to initiate the connection to a client, rather than the traditional model where clients connect to servers. This is particularly useful in scenarios where the server is behind a firewall or NAT, making it difficult for clients to directly connect to it.

How to use Reverse Connect

To enable reverse connect mode, specify the client endpoint URL using the --rc or --reverseconnect parameter:

dotnet ConsoleReferenceClient.dll --rc=opc.tcp://localhost:65300 opc.tcp://localhost:62541/Quickstarts/ReferenceServer

The client will start a reverse connect listener on the specified endpoint (e.g., opc.tcp://localhost:65300) and wait for the server to connect to it.

Example: Client and Server with Reverse Connect

  1. Start the client with reverse connect listener on port 65300:

    dotnet ConsoleReferenceClient.dll --rc=opc.tcp://localhost:65300 opc.tcp://localhost:62541/Quickstarts/ReferenceServer
    
  2. In a separate terminal, start the server with reverse connect to the client:

    dotnet ConsoleReferenceServer.dll --rc=opc.tcp://localhost:65300 -a
    

The server will establish a reverse connection to the client endpoint, and the client will use this connection to communicate with the server.

How to specify User Identity

Username & Password

Specify as console parameters: -un YourUsername -up YourPassword

Certificate

Place your user certificate in the TrustedUserCertificatesStore (the path can be found in the client configuration XML). Make sure to include an accessible private key with the certificate. Specify console parameters: -uc Thumbprint (of the user certificate to select) -ucp Password (of the user certificates private key (optional))