Glossary · Address space

Method

In OPC UA, a Method is the NodeClass representing a callable server-side procedure. It is invoked with the Call service against an object NodeId plus a method NodeId, takes input arguments and returns output arguments described by the InputArguments and OutputArguments properties, and reports success per argument as well as overall.

How a Method is described

A Method node carries Executable and UserExecutable flags, the second reflecting the calling user's Role permissions. Its signature lives in two Properties: InputArguments and OutputArguments, each an array of the Argument structure, which gives a name, DataType, ValueRank, ArrayDimensions and a LocalizedText description per argument. A client can therefore build a call dialog with no prior knowledge, which is exactly what UaExpert does.

Calling on an object, not on the method alone

The CallMethodRequest names both the ObjectId that owns the method and the MethodId. The same MethodId reached through two different objects can be legal, and a server that gets a mismatched pair answers BadMethodInvalid. Instance methods are reached by HasComponent from their owning Object; methods declared on an ObjectType are the declarations, and are usually not callable themselves.

Results and error reporting

The response carries an overall StatusCode, an array of InputArgumentResults with one StatusCode per argument, and the output arguments if the call succeeded. Argument-level errors report BadTypeMismatch or BadOutOfRange against the specific argument, which is far more useful for diagnosis than the overall code. Methods are synchronous by contract; a long-running operation should be modelled as a Program per Part 10, or return GoodCompletesAsynchronously and report progress through a state machine.

Example

Calling a method and the argument-level result structure

Method node
  ns=4;s=Mixer_01.SetRecipe        BrowseName 4:SetRecipe
  Executable      true
  UserExecutable  false   <- current user may not call it

InputArguments  (Property, Argument[])
  [0] RecipeId   UInt32       "Recipe number 1..99"
  [1] Comment    String       "Operator note, optional"
OutputArguments (Property, Argument[])
  [0] Accepted   Boolean

Call request
  ObjectId = ns=4;s=Mixer_01
  MethodId = ns=4;s=Mixer_01.SetRecipe
  InputArguments = [ UInt32 7, String "night shift" ]

Response
  StatusCode          Bad_UserAccessDenied
  InputArgumentResults [ Good, Good ]
The mistake people make: Reading Executable and concluding you may call the method. Executable describes the method's own state; UserExecutable applies the current session's Role permissions, and it is the one that decides. Calling with an anonymous session against a method that needs an authenticated operator returns BadUserAccessDenied even though Executable is true.

Defined in: Part 3 - Address Space Model, Method NodeClass; Part 4 - Services for the Call service and the Argument structure.

Last verified 7 September 2026 against OPC UA 1.05.07. OPC UA Connect is an educational resource and is not affiliated with the OPC Foundation.

Free download
OPC UA Server Acceptance Test Pack
A 40-check acceptance test you run against a vendor's server before commissioning sign-off. Weighted scoring, three hard gates, and a one-page verdict for the supplier meeting.
Get the free test pack →
Free, no course, no login