OPC Studio User's Guide and Reference
EndpointSelectionTimeout Property (_UAClientSessionParameters)
Example 



OpcLabs.EasyOpcUA Assembly > OpcLabs.EasyOpc.UA.Engine.ComTypes Namespace > _UAClientSessionParameters Interface : EndpointSelectionTimeout Property
A timeout for endpoint selection (in milliseconds).
Syntax
'Declaration
 
Property EndpointSelectionTimeout As Integer
'Usage
 
Dim instance As _UAClientSessionParameters
Dim value As Integer
 
instance.EndpointSelectionTimeout = value
 
value = instance.EndpointSelectionTimeout
int EndpointSelectionTimeout {get; set;}
property int EndpointSelectionTimeout {
   int get();
   void set (    int value);
}
Remarks

This is actually an operation timeout that is used when selecting the server endpoint (for the OPC UA GetEndpoints service call, which happens at the beginning of the connection process, before the normal session is open). The default is intentionally shorter than the normal operation timeout, so that the inability to select the endpoint causes the connection to fail in a reasonable time.

In order to obtain or modify this parameter, in the default state (when OpcLabs.EasyOpc.UA.EasyUAClientCore.Isolated equals to false), access OpcLabs.EasyOpc.UA.Engine.UAClientAdaptableParameters.SessionParameters property of static OpcLabs.EasyOpc.UA.EasyUAClientCore.AdaptableParameters. If you have set OpcLabs.EasyOpc.UA.EasyUAClientCore.Isolated to true, you need to access OpcLabs.EasyOpc.UA.Engine.UAClientAdaptableParameters.SessionParameters property of OpcLabs.EasyOpc.UA.EasyUAClientCore.IsolatedParameters.

Example

.NET

.NET

// This example shows how to set fairly short OPC UA timeouts (failures can thus occur).
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .

using System;
using OpcLabs.EasyOpc.UA;

namespace UADocExamples._UAClientSessionParameters
{
    class Timeouts
    {
        public static void Isolated()
        {
            UAEndpointDescriptor endpointDescriptor =
                "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
            // or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported)
            // or "https://opcua.demo-this.com:51212/UA/SampleServer/"

            // Instantiate the client object and set timeouts
            var client = new EasyUAClient
            {
                Isolated = true,
                IsolatedParameters =
                {
                    SessionParameters =
                    {
                        EndpointSelectionTimeout = 1500,
                        SessionConnectTimeout = 3000,
                        SessionTimeout = 3000,
                        SessionTimeoutDebug = 3000
                    }
                }
            };

            Console.WriteLine("Subscribing...");
            // The callback is a lambda expression the displays the value
            client.SubscribeDataChange(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000,
                (sender, eventArgs) =>
                {
                    if (eventArgs.Succeeded)
                        Console.WriteLine("Value: {0}", eventArgs.AttributeData.Value);
                    else
                        Console.WriteLine("*** Failure: {0}", eventArgs.ErrorMessageBrief);
                });

            Console.WriteLine("Processing data change events for 10 seconds...");
            System.Threading.Thread.Sleep(10 * 1000);

            Console.WriteLine("Unsubscribing...");
            client.UnsubscribeAllMonitoredItems();

            Console.WriteLine("Waiting for 2 seconds...");
            System.Threading.Thread.Sleep(2 * 1000);
        }
    }
}
# This example shows how to set fairly short OPC UA timeouts (failures can thus occur).
#
# Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .
# OPC client and subscriber examples in Python on GitHub: https://github.com/OPCLabs/Examples-QuickOPC-Python .
# The QuickOPC package is needed. Install it using "pip install opclabs_quickopc".
import opclabs_quickopc
import time

# Import .NET namespaces.
from OpcLabs.EasyOpc.UA import *
from OpcLabs.EasyOpc.UA.OperationModel import *


def dataChangeNotification(sender, eventArgs):
    # Display value.
    if eventArgs.Succeeded:
        print('Value: ', eventArgs.AttributeData.Value, sep='')
    else:
        print('*** Failure: ', eventArgs.ErrorMessageBrief, sep='')


endpointDescriptor = UAEndpointDescriptor('opc.tcp://opcua.demo-this.com:51210/UA/SampleServer')
# or 'http://opcua.demo-this.com:51211/UA/SampleServer' (currently not supported)
# or 'https://opcua.demo-this.com:51212/UA/SampleServer/'

# Instantiate the client object and set timeouts.
client = EasyUAClient()
client.Isolated = True
client.IsolatedParameters.SessionParameters.EndpointSelectionTimeout = 1500
client.IsolatedParameters.SessionParameters.SessionConnectTimeout = 3000
client.IsolatedParameters.SessionParameters.SessionTimeout = 3000
client.IsolatedParameters.SessionParameters.SessionTimeoutDebug = 3000

print('Subscribing...')
IEasyUAClientExtension.SubscribeDataChange(client,
    endpointDescriptor,
    UANodeDescriptor('nsu=http://test.org/UA/Data/ ;i=10853'),
    1000,
    EasyUADataChangeNotificationEventHandler(dataChangeNotification))

print('Processing data change events for 10 seconds...')
time.sleep(10)

print('Unsubscribing...')
client.UnsubscribeAllMonitoredItems()

print('Waiting for 2 seconds...')
time.sleep(2)

print('Finished.')
' This example shows how to set fairly short OPC UA timeouts (failures can thus occur).
'
' Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .

Imports OpcLabs.EasyOpc.UA

Namespace _UAClientSessionParameters
    Partial Friend Class Timeouts
        Public Shared Sub Isolated()

            ' Define which server we will work with.
            Dim endpointDescriptor As UAEndpointDescriptor =
                    "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer"
            ' or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported)
            ' or "https://opcua.demo-this.com:51212/UA/SampleServer/"

            ' Instantiate the client object and set timeouts
            Dim client = New EasyUAClient() With
                {
                    .Isolated = True,
                    .IsolatedParameters = New Engine.EasyUAAdaptableParameters() With
                        {
                            .SessionParameters = New Engine.UASmartSessionParameters() With
                                {
                                    .EndpointSelectionTimeout = 1500,
                                    .SessionConnectTimeout = 3000,
                                    .SessionTimeout = 3000,
                                    .SessionTimeoutDebug = 3000
                                }
                        }
                }

            Console.WriteLine("Subscribing...")
            ' The callback is a lambda expression the displays the value
            client.SubscribeDataChange(endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000,
                Sub(sender, eventArgs)
                    If eventArgs.Succeeded Then
                        Console.WriteLine("Value: {0}", eventArgs.AttributeData.Value)
                    Else
                        Console.WriteLine("*** Failure: {0}", eventArgs.ErrorMessageBrief)
                    End If
                End Sub)

            Console.WriteLine("Processing data change events for 10 seconds...")
            Threading.Thread.Sleep(10 * 1000)

            Console.WriteLine("Unsubscribing...")
            client.UnsubscribeAllMonitoredItems()

            Console.WriteLine("Waiting for 2 seconds...")
            Threading.Thread.Sleep(2 * 1000)
        End Sub
    End Class
End Namespace
// Shows an OPC UA data change observable with specified timeouts.
//
// Find all latest examples here: https://opclabs.doc-that.com/files/onlinedocs/OPCLabs-OpcStudio/Latest/examples.html .

using OpcLabs.EasyOpc.UA.Reactive;
using System;
using System.Threading;
using OpcLabs.EasyOpc.UA;

namespace ReactiveDocExamples
{
    namespace _UADataChangeNotificationObservable
    {
        partial class Subscribe
        {
            public static void Timeouts()
            {
                // Define which server we will work with.
                UAEndpointDescriptor endpointDescriptor =
                    "opc.tcp://opcua.demo-this.com:51210/UA/SampleServer";
                // or "http://opcua.demo-this.com:51211/UA/SampleServer" (currently not supported)
                // or "https://opcua.demo-this.com:51212/UA/SampleServer/"

                Console.WriteLine("Creating observable...");
                UADataChangeNotificationObservable<float> observable =
                    UADataChangeNotificationObservable.Create<float>(
                        endpointDescriptor, "nsu=http://test.org/UA/Data/ ;i=10853", 1000);
                // Set fairly short timeouts (failure can thus occur).
                observable.ClientSelector.Isolated = true;
                observable.ClientSelector.IsolatedParameters.SessionParameters.EndpointSelectionTimeout = 1500;
                observable.ClientSelector.IsolatedParameters.SessionParameters.SessionConnectTimeout = 3000;
                observable.ClientSelector.IsolatedParameters.SessionParameters.SessionTimeout = 3000;
                observable.ClientSelector.IsolatedParameters.SessionParameters.SessionTimeoutDebug = 3000;

                Console.WriteLine("Subscribing...");
                using (observable.Subscribe(e => Console.WriteLine(
                    (e.Exception is null) ? e.AttributeData.ToString() : e.Exception.GetBaseException().ToString())))
                {
                    Console.WriteLine("Waiting for 10 seconds...");
                    Thread.Sleep(10*1000);

                    Console.WriteLine("Unsubscribing...");
                }

                Console.WriteLine("Waiting for 2 seconds...");
                Thread.Sleep(2 * 1000);
            }
        }
    }
}
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