The Session-less Service invocation is introduced for Services, such as Read, Write or Call, that do not require any caller specific state information. It is accessible through the SessionlessInvoke Service which provides the context information required to call Services without a Session.

Session-less invocation is limited to Services of the View Service Set (with exception of RegisterNodes and UnregisterNodes), Attribute Service Set, Method Service Set, NodeManagement Service Set and Query Service Set. If Session-less Service invocation is supported by a Server, all Services belonging to these Service Sets that are supported by a Server via a Session shall also be supported via the SessionlessInvoke Service.

Session-less Services are invoked via a SecureChannel using the Access Token returned from the Authorization Service as the authenticationToken in the requestHeader. The SecureChannel shall have encryption enabled to prevent eavesdroppers from seeing the Access Token. The Access Token provides the user authentication. If application authentication through the SecureChannel is sufficient, Servers may not require the Access Token and assume an anonymous user. In this case the authenticationToken shall be null.

The SessionlessInvoke Messages are just an envelope for the Service to invoke and do not have a RequestHeader and ResponseHeader like other Services. Those parameters are already part of the body which contains the Message for the Service to invoke.

Any Endpoint used for normal communication could be used for Session-less invocation provided the Endpoint supports encryption. The Server returns Bad_ServiceUnsupported if it does not support Session-less invocation for the request specified in the body. If it supports invocation but not with the combination of Endpoint and security settings used it returns Bad_SecurityModeInsufficient.

Servers may expose Endpoints which are only for use with Session-less invocation. These Endpoints shall support GetEndpoints and FindServers in addition to the SessionlessInvoke Service. The Server returns Bad_ServiceUnsupported for the other Services.

A Session ensures that a namespace index or a server index does not change during the lifetime of a Session. This cannot be ensured between Session-less Services invocations. There are two options to ensure the namespace indices in the call match the expected namespace URIs in the Server. One option for the caller is to provide the list of namespace URIs used to build the namespace indices. This works best for single Session-less Service invocations. The second option is to provide the UrisVersion to ensure consistency of namespace arrays between Client and Server. The UrisVersion is first read from the Server together with the NamespaceArray and ServerArray. This reduces the overhead per call for a sequence of Session-less Service invocations.

Table 107 defines the parameters for the Service.

Table 107 – SessionlessInvoke Service Parameters

Name

Type

Description

Request

urisVersion

VersionTime

The version of the NamespaceArray and the ServerArray used for the Service invocation. The version shall match the value of the UrisVersion Property that defines the version for the URI lists in the NamespaceArray and the ServerArray Properties defined in OPC 10000-5. If the urisVersion parameter does not match the Server's UrisVersion Property, the Server shall return Bad_VersionTimeInvalid. In this case the Client shall read the UrisVersion, NamespaceArray and the ServerArray from the Server Object to repeat the Service invocation with the right version. The VersionTime DataType is defined in 7.44.

If the value is 0, the parameter is ignored and the URIs are defined by the namespaceUris and serverUris parameters in request and response.

If the value is non-zero, the namespaceUris and serverUris parameters in the request are ignored by the Server and set to null or empty arrays in the response.

namespaceUris []

String

A list of URIs referenced by NodeIds or QualifiedNames in the request.

NamespaceIndex 0 shall not be in this list.

The first entry in this list is NamespaceIndex 1.

The parameter shall be ignored by the Server if the urisVersion is not 0.

serverUris []

String

A list of URIs referenced by ExpandedNodeIds in the request.

ServerIndex 0 shall not be in this list.

The first entry in this list is ServerIndex 1.

The parameter shall be ignored by the Server if the urisVersion is not 0.

localeIds []

LocaleId

List of locale ids in priority order for localized strings. The first LocaleId in the list has the highest priority. If the Server returns a localized string to the Client, the Server shall return the translation with the highest priority that it can. If it does not have a translation for any of the locales identified in this list, then it shall return the string value that it has and include the locale id with the string. See OPC 10000-3 for more detail on locale ids. If localeIds is empty, the returned language variant is Server specific.

serviceId

UInt32

The numeric identifier assigned to the Service request DataType NodeId describing the body.

body

*

The body of the request.

The body is an embedded structure containing the corresponding Service request for the serviceId.

Response

namespaceUris []

String

A list of URIs referenced by NodeIds or QualifiedNames in the response.

NamespaceIndex 0 shall not be in this list.

The first entry in this list is NamespaceIndex 1.

An empty array shall be returned if the urisVersion is not 0.

serverUris []

String

A list of URIs referenced by ExpandedNodeIds in the response.

ServerIndex 0 shall not be in this list.

The first entry in this list is ServerIndex 1.

An empty array shall be returned if the urisVersion is not 0.

serviceId

UInt32

The numeric identifier assigned to the Service response DataType NodeId describing the body.

body

*

The body of the response.

The body is an embedded structure containing the corresponding Service response for the serviceId.

Table 108 defines the Service results specific to this Service. Common StatusCodes are defined in Table 182.

Table 108 – SessionlessInvoke Service Result Codes

Symbolic Id

Description

Bad_VersionTimeInvalid

The provided version time is no longer valid.