Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions Applications/ConsoleReferenceClient/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,34 @@ Some of these parameters are explained in more detail below.

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

## 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:

```bash
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:
```bash
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:
```bash
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:
Expand All @@ -18,3 +46,4 @@ Place your user certificate in the TrustedUserCertificatesStore (the path can be
Specify console parameters:
`-uc Thumbprint` (of the user certificate to select)
`-ucp Password` (of the user certificates private key (optional))

24 changes: 24 additions & 0 deletions Applications/ConsoleReferenceServer/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public static async Task<int> Main(string[] args)
bool provisioningMode = false;
char[] password = null;
int timeout = -1;
string reverseConnectUrlString = null;

string usage = Utils.IsRunningOnMono()
? $"Usage: mono {applicationName}.exe [OPTIONS]"
Expand All @@ -98,6 +99,11 @@ public static async Task<int> Main(string[] args)
"provision",
"start server in provisioning mode with limited namespace for certificate provisioning",
p => provisioningMode = p != null
},
{
"rc|reverseconnect=",
"Connect to the specified client endpoint for reverse connect. (e.g. rc=opc.tcp://localhost:65300)",
url => reverseConnectUrlString = url
}
};

Expand Down Expand Up @@ -185,6 +191,24 @@ await server
logger.LogInformation("Start the server.");
await server.StartAsync().ConfigureAwait(false);

// setup reverse connect if specified
if (!string.IsNullOrEmpty(reverseConnectUrlString))
{
try
{
logger.LogInformation("Adding reverse connection to {Url}.", reverseConnectUrlString);
var reverseConnectUrl = new Uri(reverseConnectUrlString);
server.Server.AddReverseConnection(reverseConnectUrl);
}
catch (UriFormatException ex)
{
logger.LogError(ex, "Invalid reverse connect URL: {Url}", reverseConnectUrlString);
throw new ErrorExitException(
$"Invalid reverse connect URL: {reverseConnectUrlString}",
ExitCode.ErrorInvalidCommandLine);
}
}

// Apply custom settings for CTT testing
if (cttMode)
{
Expand Down
49 changes: 49 additions & 0 deletions Applications/ConsoleReferenceServer/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# OPC Foundation UA .NET Standard Reference Server

## Introduction

The console reference server 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 server with the parameter `-h`.

## 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:

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

or

```bash
dotnet ConsoleReferenceServer.dll --reverseconnect=opc.tcp://localhost:65300
```

### Example: Server and Client with Reverse Connect

1. Start the client with reverse connect listener on port 65300:
```bash
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:
```bash
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.

### Additional Options

- `-a` or `--autoaccept`: Auto accept untrusted certificates (for testing only)
- `-c` or `--console`: Log to console
- `-l` or `--log`: Log app output
- `-t` or `--timeout`: Timeout in seconds to exit application

For the complete list of options, use `--help`.