OPC Studio User's Guide and Reference
ClientSessionDisconnected Event
Example 



OpcLabs.ServerOpcUA Assembly > OpcLabs.EasyOpc.UA.Services Namespace > IEasyUAServerConnectionMonitoring Interface : ClientSessionDisconnected Event
Raised when a client has disconnected from the server.
Syntax
'Declaration
 
Event ClientSessionDisconnected As EasyUAClientSessionConnectionEventHandler
'Usage
 
Dim instance As IEasyUAServerConnectionMonitoring
Dim handler As EasyUAClientSessionConnectionEventHandler
 
AddHandler instance.ClientSessionDisconnected, handler
event EasyUAClientSessionConnectionEventHandler ClientSessionDisconnected
event EasyUAClientSessionConnectionEventHandler^ ClientSessionDisconnected
Event Data

The event handler receives an argument of type EasyUAClientSessionConnectionEventArgs containing data related to this event. The following EasyUAClientSessionConnectionEventArgs properties provide information specific to this event.

PropertyDescription
The URL of the endpoint.  
The URL string of the endpoint.  
The OPC UA session Id.  
The OPC UA session name.  
Remarks

This event is triggered whenever an existing client session is terminated, allowing for custom handling or logging of disconnections. It provides an opportunity to respond to client disconnections, such as releasing resources or performing cleanup tasks.

You can obtain the current number of client sessions using the ClientSessionCount.

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