The Session-less Serviceinvocation is introduced for Services, such as Read, Writeor Call, that do not require any caller specific state information. It is accessible through the SessionlessInvoke Servicewhich provides the context information required to call Serviceswithout a Session.
Session-less invocation is limited to Servicesof the View Service Set(with exception of RegisterNodesand UnregisterNodes), Attribute Service Set, Method Service Set, NodeManagement Service Setand Query Service Set. All Servicesbelonging to these Service Setsthat are supported by a Servervia a Sessionshall also be supported via the SessionlessInvoke Service.
Session-less Servicescan be invoked via a SecureChannelby using theAccess Token returned from the Authorization Serviceas the authenticationTokenin therequestHeader. TheSecureChannel shall have encryption enabled to prevent eavesdroppers from seeing the Access Token. The Access Tokenprovides the user authentication. If application authentication through the SecureChannelis sufficient, Serversmay not require the Access Tokenand assume an anonymous user. In this case the authenticationTokenshall be null.
The SessionlessInvoke Messagesare just an envelope for the Serviceto invoke and do not have a RequestHeaderand ResponseHeaderlike other Services. Those parameters are already part of the bodywhich contains the Messagefor the Serviceto invoke.
Any Endpointused for normal communication could be used for Session-less invocation provided the Endpointsupports encryption. The Serverreturns Bad_ServiceUnsupportedif it does not support Session-less invocation for the request specified in the body. If it supports invocation but not with the combination of Endpointand security settings used it returns Bad_SecurityModeInsufficient.
Serversmay expose Endpointswhich are only for use with Session-less invocation. These Endpointsshall support GetEndpointsand FindServersin addition to the SessionlessInvoke Service. The Serverreturns Bad_ServiceUnsupported for the other Services.
A Sessionensures that a namespace index or a server index does not change during the lifetime of a Session. This cannot be ensured between Session-less Servicesinvocations. 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 Serviceinvocations. The second option is to provide the UrisVersionto ensure consistency of namespace arrays between Clientand Server. The UrisVersionis first read from the Servertogether with the NamespaceArrayand ServerArray. This reduces the overhead per call for a sequence of Session-less Serviceinvocations.