OPC Studio User's Guide and Reference
EndpointUrlString Property (EasyUAClientSessionConnectionEventArgs)
Example 



OpcLabs.ServerOpcUA Assembly > OpcLabs.EasyOpc.UA.OperationModel Namespace > EasyUAClientSessionConnectionEventArgs Class : EndpointUrlString Property
The URL string of the endpoint.
Syntax
'Declaration
 
<NotNullAttribute()>
Public Property EndpointUrlString As String
'Usage
 
Dim instance As EasyUAClientSessionConnectionEventArgs
Dim value As String
 
instance.EndpointUrlString = value
 
value = instance.EndpointUrlString
[NotNull()]
public string EndpointUrlString {get; set;}
[NotNull()]
public:
property String^ EndpointUrlString {
   String^ get();
   void set (    String^ value);
}

Property Value

The value of this property cannot be null (Nothing in Visual Basic).

The default value of this property is "" (String.Empty).

Exceptions
ExceptionDescription

A null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument.

This is a usage error, i.e. it will never occur (the exception will not be thrown) in a correctly written program. Your code should not catch this exception.

Example
// This example shows how to monitor OPC UA client connections to the server.
// You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using System;
using Microsoft.Extensions.DependencyInjection;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.NodeSpace;
using OpcLabs.EasyOpc.UA.OperationModel;
using OpcLabs.EasyOpc.UA.Services;

namespace UAServerDocExamples._EasyUAServerConnectionMonitoring
{
    class ClientSessions
    {
        public static void Main1()
        {
            // Instantiate the server object.
            // By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            var server = new EasyUAServer();

            // Define a data variable providing random integers.
            var random = new Random();
            server.Add(new UADataVariable("MyDataVariable").ReadValueFunction(() => random.Next()));

            // Obtain the server connection monitoring service.
            IEasyUAServerConnectionMonitoring serverConnectionMonitoring = server.GetService<IEasyUAServerConnectionMonitoring>();
            if (serverConnectionMonitoring is null)
            {
                Console.WriteLine("The server connection monitoring service is not available.");
                return;
            }

            // Hook events.
            serverConnectionMonitoring.ClientSessionConnected += ServerConnectionMonitoringOnClientSessionConnected;
            serverConnectionMonitoring.ClientSessionDisconnected += ServerConnectionMonitoringOnClientSessionDisconnected;

            // Start the server.
            Console.WriteLine("The server is starting...");
            server.Start();

            Console.WriteLine("The server is started.");
            Console.WriteLine();

            // Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...");
            Console.ReadLine();

            // Stop the server.
            Console.WriteLine("The server is stopping...");
            server.Stop();

            Console.WriteLine("The server is stopped.");
        }

        // Event handler for the ClientSessionConnected event.
        static private void ServerConnectionMonitoringOnClientSessionConnected(
            object sender, 
            EasyUAClientSessionConnectionEventArgs e)

        {
            var serverConnectionMonitoring = (IEasyUAServerConnectionMonitoring)sender;
            Console.WriteLine(
                $"A client session has connected to endpoint \"{e.EndpointUrlString}\". " + 
                $"There is now {serverConnectionMonitoring.ClientSessionCount} client session(s).");
        }

        // Event handler for the ClientSessionDisconnected event.
        static private void ServerConnectionMonitoringOnClientSessionDisconnected(
            object sender,
            EasyUAClientSessionConnectionEventArgs e)
        {
            var serverConnectionMonitoring = (IEasyUAServerConnectionMonitoring)sender;
            Console.WriteLine(
                $"A client session has disconnected from endpoint \"{e.EndpointUrlString}\". " + 
                $"There is now {serverConnectionMonitoring.ClientSessionCount} client session(s).");
        }
    }
}
' This example shows how to monitor OPC UA client connections to the server.
' You can use any OPC UA client, including our Connectivity Explorer and OpcCmd utility, to connect to the server. 
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.

Imports System
Imports Microsoft.Extensions.DependencyInjection
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.NodeSpace
Imports OpcLabs.EasyOpc.UA.OperationModel
Imports OpcLabs.EasyOpc.UA.Services

Namespace _EasyUAServerConnectionMonitoring
    Partial Friend Class ClientSessions
        Shared Sub Main1()
            ' Instantiate the server object.
            ' By default, the server will run on endpoint URL "opc.tcp://localhost:48040/".
            Dim server = New EasyUAServer()

            ' Define a data variable providing random integers.
            Dim random = New Random()
            server.Add(New UADataVariable("MyDataVariable").ReadValueFunction(Function() random.Next()))

            ' Obtain the server connection monitoring service.
            Dim serverConnectionMonitoring As IEasyUAServerConnectionMonitoring = server.GetService(Of IEasyUAServerConnectionMonitoring)
            If serverConnectionMonitoring Is Nothing Then
                Console.WriteLine("The server connection monitoring service is not available.")
                Exit Sub
            End If


            ' Hook events.
            AddHandler serverConnectionMonitoring.ClientSessionConnected, AddressOf ServerConnectionMonitoringOnClientSessionConnected
            AddHandler serverConnectionMonitoring.ClientSessionDisconnected, AddressOf ServerConnectionMonitoringOnClientSessionDisconnected

            ' Start the server.
            Console.WriteLine("The server is starting...")
            server.Start()

            Console.WriteLine("The server is started.")
            Console.WriteLine()

            ' Let the user decide when to stop.
            Console.WriteLine("Press Enter to stop the server...")
            Console.ReadLine()

            ' Stop the server.
            Console.WriteLine("The server is stopping...")
            server.Stop()

            Console.WriteLine("The server is stopped.")
        End Sub

        ' Event handler for the ClientSessionConnected event.
        Private Shared Sub ServerConnectionMonitoringOnClientSessionConnected(ByVal sender As Object, ByVal e As EasyUAClientSessionConnectionEventArgs)
            Dim serverConnectionMonitoring As IEasyUAServerConnectionMonitoring = sender
            Console.WriteLine(
                $"A client session has connected to endpoint ""{e.EndpointUrlString}"". " +
                $"There is now {serverConnectionMonitoring.ClientSessionCount} client session(s).")
        End Sub

        ' Event handler for the ClientSessionDisconnected event.
        Private Shared Sub ServerConnectionMonitoringOnClientSessionDisconnected(ByVal sender As Object, ByVal e As EasyUAClientSessionConnectionEventArgs)
            Dim serverConnectionMonitoring As IEasyUAServerConnectionMonitoring = sender
            Console.WriteLine(
                $"A client session has disconnected from endpoint ""{e.EndpointUrlString}"". " +
                $"There is now {serverConnectionMonitoring.ClientSessionCount} client session(s).")
        End Sub
    End Class
End Namespace
// A fully functional OPC UA demo server running in Windows Forms host.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
// OPC client, server and subscriber examples in C# on GitHub: https://github.com/OPCLabs/Examples-OPCStudio-CSharp .
// Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
// a commercial license in order to use Online Forums, and we reply to every post.

using System.Linq;
using System.Windows.Forms;
using Microsoft.Extensions.DependencyInjection;
using OpcLabs.EasyOpc.UA;
using OpcLabs.EasyOpc.UA.Forms.Application;
using OpcLabs.EasyOpc.UA.OperationModel;
using OpcLabs.EasyOpc.UA.Services;
using UAServerDemoLibrary;

namespace UAServerWindowsFormsDemo
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();

            // Instantiating the EasyUAServer here, and not inline where the field is declared, is important for it to
            // acquire the proper synchronization context.
            _server = new EasyUAServer();
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            // Extend the form's system menu by a command for OPC UA application management.
            EasyUAFormsApplication.Instance.AddToSystemMenu(this);

            // Define various nodes.
            DataNodes.AddToParent(_server.Objects);
            DemoNodes.AddToParent(_server.Objects);

            // Hook events to the server object.
            _server.EndpointStateChanged += ServerOnEndpointStateChanged;

            // Obtain the server connection monitoring service.
            IEasyUAServerConnectionMonitoring serverConnectionMonitoring = _server.GetService<IEasyUAServerConnectionMonitoring>();
            if (!(serverConnectionMonitoring is null))
            {
                // Hook events to the connection monitoring service.
                serverConnectionMonitoring.ClientSessionConnected += ServerConnectionMonitoringOnClientSessionConnected;
                serverConnectionMonitoring.ClientSessionDisconnected += ServerConnectionMonitoringOnClientSessionDisconnected;
            }

            _server.Start();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            _server.Stop();
        }

        private void ServerOnEndpointStateChanged(object sender, EasyUAServerEndpointStateChangedEventArgs e)
        {
            // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
            // event handlers directly, because the events are raised using the synchronization context acquired at time of
            // the creation.

            string endpointUrlString = e.EndpointUrlString;
            ListViewItem listViewItem = endpointStateListView.Items.Cast<ListViewItem>().FirstOrDefault(item => 
                item.Text == endpointUrlString);
            if (listViewItem is null)
            {
                listViewItem = new ListViewItem(endpointUrlString);
                endpointStateListView.Items.Add(listViewItem);
                listViewItem.SubItems.Add("");
                listViewItem.SubItems.Add("");
            }
            listViewItem.SubItems[1].Text = e.ConnectionState.ToString();
            listViewItem.SubItems[2].Text = e.Exception?.Message ?? "";
        }

        private void ServerConnectionMonitoringOnClientSessionConnected(object sender, EasyUAClientSessionConnectionEventArgs e)
        {
            // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
            // event handlers directly, because the events are raised using the synchronization context acquired at time of
            // the creation.

            var listViewItem = new ListViewItem(e.SessionId.Identifier.ToString());
            listViewItem.SubItems.Add(e.SessionName);
            connectionsListView.Items.Add(listViewItem);
        }

        private void ServerConnectionMonitoringOnClientSessionDisconnected(object sender, EasyUAClientSessionConnectionEventArgs e)
        {
            // Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
            // event handlers directly, because the events are raised using the synchronization context acquired at time of
            // the creation.

            string identifierString = e.SessionId.Identifier.ToString();
            ListViewItem listViewItem = connectionsListView.Items.Cast<ListViewItem>().FirstOrDefault(item =>
                item.Text == identifierString);
            if (!(listViewItem is null))
                connectionsListView.Items.Remove(listViewItem);
        }

        private readonly EasyUAServer _server;
    }
}
' A fully functional OPC UA demo server running in Windows Forms host.
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
' OPC client and subscriber examples in VB.NET on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-VBNET .
' Missing some example? Ask us for it on our Online Forums, https://www.opclabs.com/forum/index ! You do not have to own
' a commercial license in order to use Online Forums, and we reply to every post.

Imports System.Linq
Imports System.Windows.Forms
Imports Microsoft.Extensions.DependencyInjection
Imports OpcLabs.EasyOpc.UA
Imports OpcLabs.EasyOpc.UA.Forms.Application
Imports OpcLabs.EasyOpc.UA.OperationModel
Imports OpcLabs.EasyOpc.UA.Services
Imports UAServerDemoLibrary

Public Class MainForm
    Sub New()
        InitializeComponent()

        ' Instantiating the EasyUAServer here, and not inline where the field is declared, is important for it to
        ' acquire the proper synchronization context.
        _server = New EasyUAServer()
    End Sub

    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' Extend the form's system menu by a command for OPC UA application management.
        EasyUAFormsApplication.Instance.AddToSystemMenu(Me)

        ' Define various nodes.
        DataNodes.AddToParent(_server.Objects)
        DemoNodes.AddToParent(_server.Objects)

        ' Hook events to the server object.
        AddHandler _server.EndpointStateChanged, AddressOf ServerOnEndpointStateChanged

        ' Obtain the server connection monitoring service.
        Dim serverConnectionMonitoring As IEasyUAServerConnectionMonitoring = _server.GetService(Of IEasyUAServerConnectionMonitoring)()
        If (Not (serverConnectionMonitoring Is Nothing)) Then
            ' Hook events to the connection monitoring service.
            AddHandler serverConnectionMonitoring.ClientSessionConnected, AddressOf ServerConnectionMonitoringOnClientSessionConnected
            AddHandler serverConnectionMonitoring.ClientSessionDisconnected, AddressOf ServerConnectionMonitoringOnClientSessionDisconnected
        End If

        _server.Start()
    End Sub

    Private ReadOnly _server As EasyUAServer

    Private Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        _server.Stop()
    End Sub

    Private Sub ServerOnEndpointStateChanged(sender As Object, e As EasyUAServerEndpointStateChangedEventArgs)
        ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
        ' event handlers directly, because the events are raised using the synchronization context acquired at time of
        ' the creation.

        Dim endpointUrlString As String = e.EndpointUrlString
        Dim listViewItem As ListViewItem = endpointStateListView.Items.Cast(Of ListViewItem)().FirstOrDefault(Function(item) _
            item.Text = endpointUrlString)
        If (listViewItem Is Nothing) Then
            listViewItem = New ListViewItem(endpointUrlString)
            endpointStateListView.Items.Add(listViewItem)
            listViewItem.SubItems.Add("")
            listViewItem.SubItems.Add("")
        End If
        listViewItem.SubItems(1).Text = e.ConnectionState.ToString()
        listViewItem.SubItems(2).Text = If(e.Exception?.Message, "")
    End Sub

    Private Sub ServerConnectionMonitoringOnClientSessionConnected(sender As Object, e As EasyUAClientSessionConnectionEventArgs)
        ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
        ' event handlers directly, because the events are raised using the synchronization context acquired at time of
        ' the creation.

        Dim listViewItem = New ListViewItem(e.SessionId.Identifier.ToString())
        listViewItem.SubItems.Add(e.SessionName)
        connectionsListView.Items.Add(listViewItem)
    End Sub

    Private Sub ServerConnectionMonitoringOnClientSessionDisconnected(sender As Object, e As EasyUAClientSessionConnectionEventArgs)
        ' Note that since we have created the EasyUAServer on the UI thread, we can access the UI controls in its
        ' event handlers directly, because the events are raised using the synchronization context acquired at time of
        ' the creation.

        Dim identifierString As String = e.SessionId.Identifier.ToString()
        Dim listViewItem As ListViewItem = connectionsListView.Items.Cast(Of ListViewItem)().FirstOrDefault(Function(item) _
        item.Text = identifierString)
        If (Not (listViewItem Is Nothing)) Then
            connectionsListView.Items.Remove(listViewItem)
        End If
    End Sub

End Class
Requirements

Target Platforms: .NET Framework: Windows 10 (selected versions), Windows 11 (selected versions), Windows Server 2016, Windows Server 2022; .NET: Linux, macOS, Microsoft Windows

See Also