# OpcNodeManager Members

> Reference: Provides an abstract base class used to organize and maintain the address space or only a part of it.

<dl class="api-definition">
<dt>Type</dt>
<dd><a href="./">OpcNodeManager</a></dd>
<dt>Namespace</dt>
<dd><a href="../namespaces/opc.uafx.server">Opc.UaFx.Server</a></dd>
<dt>Assembly</dt>
<dd>Opc.UaFx.Advanced.dll</dd>
<dt>Package</dt>
<dd>Opc.UaFx.Advanced v2.59.0</dd>
</dl>

## Constructors

### OpcNodeManager

<span class="api-meta">protected · 3 overloads</span>

| Overload | Description |
|---|---|
| [OpcNodeManager(OpcNamespace, params OpcNamespace\[\])](#opcnodemanager-opc-uafx-opcnamespace-opc-uafx-opcnamespace-array)<span class="api-meta">protected · since v2.8</span> | Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespace` and additionally specified `namespaces`. |
| [OpcNodeManager(string, params string\[\])](#opcnodemanager-system-string-system-string-array)<span class="api-meta">protected</span> | Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespace` and additionally specified [string](https://learn.microsoft.com/dotnet/api/system.string)-based `namespaces`. |
| [OpcNodeManager(Uri, params Uri\[\])](#opcnodemanager-system-uri-system-uri-array)<span class="api-meta">protected</span> | Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespaceUri` and additionally specified [Uri](https://learn.microsoft.com/dotnet/api/system.uri)-based `namespaceUris`. |

#### OpcNodeManager(OpcNamespace, params OpcNamespace\[\])

<span class="api-meta">protected · since v2.8</span>

Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespace` and additionally specified `namespaces`.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcNodeManager(
    OpcNamespace defaultNamespace,
    params OpcNamespace[] namespaces)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub New(
    defaultNamespace As OpcNamespace,
    ParamArray namespaces As OpcNamespace())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `defaultNamespace` | [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) | The default [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) used for the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace) property. In case there [AssignDefaultNamespaceOfManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcautomatism/members#assigndefaultnamespaceofmanager) is equals true (the default value) the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) and [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#id) of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) instances defined are linked to this namespace in case there is no namespace information associated to them. |
| `namespaces` | params [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/)[] | An array of [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) instances indicating which namespaces are as well maintained by the new [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/). The instances can then found in the [Namespaces](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#namespaces) property as well. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `defaultNamespace` or one of the items in `namespaces` refers to a namespace which presets a namespace index. The according namespace index is determined by the server. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `defaultNamespace` or one of the items in `namespaces` is a null reference (Nothing in Visual Basic). |

#### OpcNodeManager(string, params string\[\])

<span class="api-meta">protected</span>

Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespace` and additionally specified [string](https://learn.microsoft.com/dotnet/api/system.string)-based `namespaces`.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcNodeManager(string defaultNamespace, params string[] namespaces)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub New(defaultNamespace As String, ParamArray namespaces As String())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `defaultNamespace` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The [string](https://learn.microsoft.com/dotnet/api/system.string) representation of the default [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) which is used for the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace) property. In case there [AssignDefaultNamespaceOfManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcautomatism/members#assigndefaultnamespaceofmanager) is equals true (the default value) the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) and [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#id) of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) instances defined are linked to this namespace in case there is no namespace information associated to them. |
| `namespaces` | params [String](https://learn.microsoft.com/dotnet/api/system.string)[] | An array of [string](https://learn.microsoft.com/dotnet/api/system.string) representations of the [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) indicating which namespaces are as well maintained by the new [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/). The used [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) instances can be found in the [Namespaces](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#namespaces) property as well. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `defaultNamespace` or one of the items in `namespaces` is an empty string. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `defaultNamespace` or one of the items in `namespaces` is a null reference (Nothing in Visual Basic). |

#### OpcNodeManager(Uri, params Uri\[\])

<span class="api-meta">protected</span>

Initializes a new instance of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) class using the `defaultNamespaceUri` and additionally specified [Uri](https://learn.microsoft.com/dotnet/api/system.uri)-based `namespaceUris`.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcNodeManager(Uri defaultNamespaceUri, params Uri[] namespaceUris)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub New(defaultNamespaceUri As Uri, ParamArray namespaceUris As Uri())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `defaultNamespaceUri` | [Uri](https://learn.microsoft.com/dotnet/api/system.uri) | The [Uri](https://learn.microsoft.com/dotnet/api/system.uri) representation of the default [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) which is used for the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace) property. In case there [AssignDefaultNamespaceOfManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcautomatism/members#assigndefaultnamespaceofmanager) is equals true (the default value) the [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#name) and [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#id) of the [OpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/) instances defined are linked to this namespace in case there is no namespace information associated to them. |
| `namespaceUris` | params [Uri](https://learn.microsoft.com/dotnet/api/system.uri)[] | An array of [Uri](https://learn.microsoft.com/dotnet/api/system.uri) representations of the [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) indicating which namespaces are as well maintained by the new [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/). The used [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) instances can be found in the [Namespaces](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#namespaces) property as well. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `defaultNamespaceUri` or one of the items in `namespaceUris` is a null reference (Nothing in Visual Basic). |

## Properties

### DefaultNamespace

Gets the default namespace of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcNamespace DefaultNamespace { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DefaultNamespace As OpcNamespace
```

</div>

**Property value**

[OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/)

The [OpcNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/) specified as the default namespace when the node manager was created. When the server is started, the instance is replaced by the namespace the server has registered for it.

### DefaultNamespaceIndex

Gets the index of the default namespace of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public int DefaultNamespaceIndex { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DefaultNamespaceIndex As Integer
```

</div>

**Property value**

[Int32](https://learn.microsoft.com/dotnet/api/system.int32)

The [Index](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/members#index) of the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace), which the server assigns when it is started.

### DefaultNamespaceUri

Gets the URI of the default namespace of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public Uri DefaultNamespaceUri { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DefaultNamespaceUri As Uri
```

</div>

**Property value**

[Uri](https://learn.microsoft.com/dotnet/api/system.uri)

The [Uri](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/members#uri) of the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace).

### DefaultNamespaceValue

<span class="api-meta">since v2.8</span>

Gets the textual value of the default namespace of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public string DefaultNamespaceValue { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property DefaultNamespaceValue As String
```

</div>

**Property value**

[String](https://learn.microsoft.com/dotnet/api/system.string)

The [Value](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnamespace/members#value) of the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace).

### Namespaces

<span class="api-meta">since v2.8</span>

Gets the namespaces maintained by the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadOnlyNamespaceCollection Namespaces { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Namespaces As OpcReadOnlyNamespaceCollection
```

</div>

**Property value**

[OpcReadOnlyNamespaceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynamespacecollection/)

An [OpcReadOnlyNamespaceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynamespacecollection/) which starts with the [DefaultNamespace](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#defaultnamespace), followed by the further namespaces specified when the node manager was created, without duplicates.

### NodeIdFactory

<span class="api-meta">protected · virtual</span>

Gets or sets the [OpcNodeIdFactory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeidfactory/) instance used by this node manager to determine / create node identifiers for the nodes provided / defined by the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcNodeIdFactory NodeIdFactory { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Property NodeIdFactory As OpcNodeIdFactory
```

</div>

**Property value**

[OpcNodeIdFactory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeidfactory/)

An instance of the [OpcNodeIdFactory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeidfactory/) class. In case there is no custom [OpcNodeIdFactory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeidfactory/) defined. The [Factory](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#factory) is used.

### Nodes

Gets the nodes of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadOnlyNodeCollection Nodes { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property Nodes As OpcReadOnlyNodeCollection
```

</div>

**Property value**

[OpcReadOnlyNodeCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynodecollection/)

An [OpcReadOnlyNodeCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynodecollection/) with the nodes of the address space part maintained by the node manager; an empty collection until the server has created the address space.

### NodeSetImportOptions

<span class="api-meta">protected · virtual · since v2.50</span>

Gets or sets the options to use to import the node sets provided by [ImportNodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#importnodes).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcNodeSetImportOptions NodeSetImportOptions { get; set; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Property NodeSetImportOptions As OpcNodeSetImportOptions
```

</div>

**Property value**

[OpcNodeSetImportOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodesetimportoptions/)

A combination of the [OpcNodeSetImportOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodesetimportoptions/) flags. The default value is [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodesetimportoptions/#none).

**Remarks**

The flags [CompleteDataTypeDefinitionFields](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodesetimportoptions/#completedatatypedefinitionfields) and [CompleteDataTypeDefinitionDefaultEncoding](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodesetimportoptions/#completedatatypedefinitiondefaultencoding) apply to the data types of all node managers of the server as soon as one node manager sets them.

### NotifierNodes

Gets the nodes of the node manager which act as notifiers (event sources) of the 'Server' node.

<div class="api-signature" data-lang="csharp">

```csharp
public OpcReadOnlyNodeCollection NotifierNodes { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public ReadOnly Property NotifierNodes As OpcReadOnlyNodeCollection
```

</div>

**Property value**

[OpcReadOnlyNodeCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynodecollection/)

An [OpcReadOnlyNodeCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreadonlynodecollection/) with the notifier nodes; an empty collection until the server has created the address space.

### SyncRoot

<span class="api-meta">protected</span>

Gets the object the node manager locks while it notifies monitored items about changes of its nodes and while it creates, modifies or deletes monitored items, browses, translates browse paths or accesses the history of its nodes.

<div class="api-signature" data-lang="csharp">

```csharp
protected object SyncRoot { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected ReadOnly Property SyncRoot As Object
```

</div>

**Property value**

[Object](https://learn.microsoft.com/dotnet/api/system.object)

The lock of this node manager. Every node manager has a lock of its own.

**Remarks**

The SDK does not synchronize changes of nodes. A value set, [ApplyChanges](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#applychanges-opc-uafx-opccontext-system-boolean) and [ReportEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventnode/members#reportevent) can be called from any thread, but changes of the same node from several threads at once can lose a notification or report a torn state.

Holding this lock while changing and applying changes serializes them with other code holding it and with the notification of monitored items. It does not serialize them with the Read and Write services of clients, which only lock the node accessed, nor with method calls, which run without this lock.

The notification of monitored items and the creation of monitored items call read callbacks and the monitored item events with this lock held. Such code must not wait for another thread that holds the lock of a different node manager and reports an event, because an event takes the lock of the node manager of every notifier it passes.

The lock is not public, because holding it outside of the node manager would not make changes atomic to clients either. Code that changes several nodes together therefore belongs into a method of the node manager, which can hold this lock.

### SystemContext

<span class="api-meta">protected</span>

Gets the context which the node manager uses to access its nodes.

<div class="api-signature" data-lang="csharp">

```csharp
protected OpcContext SystemContext { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected ReadOnly Property SystemContext As OpcContext
```

</div>

**Property value**

[OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/)

The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the server for the node manager; a null reference (Nothing in Visual Basic) until the server using the node manager has been started.

### UseAsyncMethodCalls

<span class="api-meta">protected · virtual · since v2.24</span>

Gets a value indicating whether every call to a [OpcMethodNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmethodnode/) defined by the current [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) is to be processed asynchronously using one worker thread per method call.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual bool UseAsyncMethodCalls { get; }
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable ReadOnly Property UseAsyncMethodCalls As Boolean
```

</div>

**Property value**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if every method call (which belongs to [OpcMethodNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmethodnode/) objects defined by the current [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/)) is to be processed parallel to each other; otherwise the value false to process method calls in their sequence. The default value is false.

**Remarks**

This behavior can be controlled by each node manager on its own. Just override the [UseAsyncMethodCalls](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#useasyncmethodcalls) property and provide the value true in the node managers which shall process method calls in parallel.

Every [OpcMethodNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcmethodnode/) defined with a delegate to a method its return value provides a [Task](https://learn.microsoft.com/dotnet/api/system.threading.tasks.task) is already processed in parallel.

Use the [UseAsyncMethodCalls](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcautomatism/members#useasyncmethodcalls) property to control this behavior for every node manager used.

## Methods

### AddNode

<span class="api-meta">8 overloads</span>

| Overload | Description |
|---|---|
| [AddNode(IOpcNode)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-iopcnode) | Adds the `node` specified to the address space of the node manager. |
| [AddNode(OpcContext, IOpcNode)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-opccontext-opc-uafx-iopcnode)<span class="api-meta">since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `context` specified. |
| [AddNode(IOpcNode, IEnumerable&lt;IOpcNodeReferenceAware&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-iopcnode-system-collections-generic-ienumerable-of-opc-uafx-iopcnodereferenceaware)<span class="api-meta">protected · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `references` specified. |
| [AddNode(IOpcNode, params IOpcNodeReferenceAware\[\])](#addnode-opc-uafx-iopcnode-opc-uafx-iopcnodereferenceaware-array)<span class="api-meta">protected · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `references` specified. |
| [AddNode(IOpcNode, OpcNodeReferenceCollection)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-iopcnode-opc-uafx-opcnodereferencecollection)<span class="api-meta">protected · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `references` specified. |
| [AddNode(OpcContext, IOpcNode, IEnumerable&lt;IOpcNodeReferenceAware&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-opccontext-opc-uafx-iopcnode-system-collections-generic-ienumerable-of-opc-uafx-iopcnodereferenceaware)<span class="api-meta">protected · virtual · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `context` and `references` specified. |
| [AddNode(OpcContext, IOpcNode, params IOpcNodeReferenceAware\[\])](#addnode-opc-uafx-opccontext-opc-uafx-iopcnode-opc-uafx-iopcnodereferenceaware-array)<span class="api-meta">protected · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `context` and `references` specified. |
| [AddNode(OpcContext, IOpcNode, OpcNodeReferenceCollection)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#addnode-opc-uafx-opccontext-opc-uafx-iopcnode-opc-uafx-opcnodereferencecollection)<span class="api-meta">protected · virtual · since v2.7</span> | Adds the `node` specified to the address space of the node manager using the `context` and `references` specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The server using the node manager has not yet been started. |

#### AddNode(IOpcNode)

Adds the `node` specified to the address space of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public void AddNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub AddNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(OpcContext, IOpcNode)

<span class="api-meta">since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `context` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void AddNode(OpcContext context, IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub AddNode(context As OpcContext, node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to add the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(IOpcNode, IEnumerable&lt;IOpcNodeReferenceAware&gt;)

<span class="api-meta">protected · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected void AddNode(
    IOpcNode node,
    IEnumerable<IOpcNodeReferenceAware> references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub AddNode(
    node As IOpcNode,
    references As IEnumerable(Of IOpcNodeReferenceAware))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/)&gt; | A sequence of [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/) instances which define the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(IOpcNode, params IOpcNodeReferenceAware\[\])

<span class="api-meta">protected · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected void AddNode(
    IOpcNode node,
    params IOpcNodeReferenceAware[] references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub AddNode(
    node As IOpcNode,
    ParamArray references As IOpcNodeReferenceAware())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | params [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/)[] | An array of [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/) instances which define the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(IOpcNode, OpcNodeReferenceCollection)

<span class="api-meta">protected · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected void AddNode(IOpcNode node, OpcNodeReferenceCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub AddNode(
    node As IOpcNode,
    references As OpcNodeReferenceCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) | The [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) which defines the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(OpcContext, IOpcNode, IEnumerable&lt;IOpcNodeReferenceAware&gt;)

<span class="api-meta">protected · virtual · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `context` and `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void AddNode(
    OpcContext context,
    IOpcNode node,
    IEnumerable<IOpcNodeReferenceAware> references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub AddNode(
    context As OpcContext,
    node As IOpcNode,
    references As IEnumerable(Of IOpcNodeReferenceAware))
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to add the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/)&gt; | A sequence of [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/) instances which define the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context`, `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(OpcContext, IOpcNode, params IOpcNodeReferenceAware\[\])

<span class="api-meta">protected · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `context` and `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected void AddNode(
    OpcContext context,
    IOpcNode node,
    params IOpcNodeReferenceAware[] references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub AddNode(
    context As OpcContext,
    node As IOpcNode,
    ParamArray references As IOpcNodeReferenceAware())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to add the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | params [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/)[] | An array of [IOpcNodeReferenceAware](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodereferenceaware/) instances which define the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context`, `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

#### AddNode(OpcContext, IOpcNode, OpcNodeReferenceCollection)

<span class="api-meta">protected · virtual · since v2.7</span>

Adds the `node` specified to the address space of the node manager using the `context` and `references` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void AddNode(
    OpcContext context,
    IOpcNode node,
    OpcNodeReferenceCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub AddNode(
    context As OpcContext,
    node As IOpcNode,
    references As OpcNodeReferenceCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to add the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to add. |
| `references` | [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) | The [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) which defines the references of the node to further nodes. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context`, `node` or `references` is a null reference (Nothing in Visual Basic). |

**Remarks**

A node which is already part of the address space is not added again.

### AddNotifierNode

<span class="api-meta">protected</span>

Adds the `node` to the collection of 'root' notifiers (= event sources) of the 'Server' node.

<div class="api-signature" data-lang="csharp">

```csharp
protected void AddNotifierNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub AddNotifierNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance acting as the notifier of the 'Server' node. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The master node has not yet been created, therefore the operation is at the moment not available. |

### Browse

<span class="api-meta">protected · virtual · since v2.7</span>

Browses the references of a node of the node manager on behalf of a client.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcBrowsePoint Browse(
    OpcContext context,
    OpcBrowsePoint browsePoint,
    OpcReferenceDescriptionCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function Browse(
    context As OpcContext,
    browsePoint As OpcBrowsePoint,
    references As OpcReferenceDescriptionCollection) As OpcBrowsePoint
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the browse operation. |
| `browsePoint` | [OpcBrowsePoint](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbrowsepoint/) | The [OpcBrowsePoint](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbrowsepoint/) which describes the node and the references to browse and the position to continue at. |
| `references` | [OpcReferenceDescriptionCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreferencedescriptioncollection/) | The [OpcReferenceDescriptionCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcreferencedescriptioncollection/) to which the references found are added. |

**Returns**

[OpcBrowsePoint](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbrowsepoint/)

An [OpcBrowsePoint](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcbrowsepoint/) to continue browsing at if not all references could be provided; otherwise a null reference (Nothing in Visual Basic).

### CreateHistory

<span class="api-meta">protected · virtual</span>

Creates the history entries of the `values` specified for the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection CreateHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    OpcValueCollection values)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function CreateHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    values As OpcValueCollection) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `values` | [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) | The [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) with the values to create. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result per value. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, each result has the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

### CreateNodes

<span class="api-meta">protected · virtual</span>

When overridden in a derived class, creates the nodes of the address space part maintained by the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IEnumerable<IOpcNode> CreateNodes(
    OpcNodeReferenceCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function CreateNodes(
    references As OpcNodeReferenceCollection) As IEnumerable(Of IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `references` | [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) | The [OpcNodeReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodereferencecollection/) to which the references of the created nodes to further nodes (e.g. to their parent nodes) are to be added. |

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)&gt;

A sequence of the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instances created. The base implementation provides no nodes.

**Remarks**

The server calls the method when it creates its address space while it is started. An exception thrown by the method is passed on as an [OpcException](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcexception/) and fails the start of the server.

### DeleteHistory

<span class="api-meta">protected · virtual · 3 overloads</span>

| Overload | Description |
|---|---|
| [DeleteHistory(IOpcNode, OpcHistoryModificationInfo, IEnumerable&lt;DateTime&gt;)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#deletehistory-opc-uafx-iopcnode-opc-uafx-opchistorymodificationinfo-system-collections-generic-ienumerable-of-system-datetime)<span class="api-meta">protected · virtual</span> | Deletes the history entries at the `times` specified of the `node` specified. |
| [DeleteHistory(IOpcNode, OpcHistoryModificationInfo, OpcValueCollection)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#deletehistory-opc-uafx-iopcnode-opc-uafx-opchistorymodificationinfo-opc-uafx-opcvaluecollection)<span class="api-meta">protected · virtual</span> | Deletes the history entries of the `values` specified of the `node` specified. |
| [DeleteHistory(IOpcNode, OpcHistoryModificationInfo, DateTime?, DateTime?, OpcDeleteHistoryOptions)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#deletehistory-opc-uafx-iopcnode-opc-uafx-opchistorymodificationinfo-system-nullable-of-system-datetime-system-nullable-of-system-datetime-opc-uafx-server-opcdeletehistoryoptions)<span class="api-meta">protected · virtual</span> | Deletes the history entries of the `node` specified within the time range specified. |

#### DeleteHistory(IOpcNode, OpcHistoryModificationInfo, IEnumerable&lt;DateTime&gt;)

<span class="api-meta">protected · virtual</span>

Deletes the history entries at the `times` specified of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection DeleteHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    IEnumerable<DateTime> times)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function DeleteHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    times As IEnumerable(Of Date)) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `times` | [IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | A sequence of the timestamps of the entries to delete. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result per timestamp. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, each result has the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

#### DeleteHistory(IOpcNode, OpcHistoryModificationInfo, OpcValueCollection)

<span class="api-meta">protected · virtual</span>

Deletes the history entries of the `values` specified of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection DeleteHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    OpcValueCollection values)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function DeleteHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    values As OpcValueCollection) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `values` | [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) | The [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) with the values whose entries are to be deleted. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result per value. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, each result has the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

#### DeleteHistory(IOpcNode, OpcHistoryModificationInfo, DateTime?, DateTime?, OpcDeleteHistoryOptions)

<span class="api-meta">protected · virtual</span>

Deletes the history entries of the `node` specified within the time range specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection DeleteHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    DateTime? startTime,
    DateTime? endTime,
    OpcDeleteHistoryOptions options)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function DeleteHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    startTime As Date?,
    endTime As Date?,
    options As OpcDeleteHistoryOptions) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The begin of the time range or a null reference (Nothing in Visual Basic) if the range is not limited at its begin. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the time range or a null reference (Nothing in Visual Basic) if the range is not limited at its end. |
| `options` | [OpcDeleteHistoryOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcdeletehistoryoptions/) | A combination of the [OpcDeleteHistoryOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcdeletehistoryoptions/) flags which specify the entries to delete. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result of the operation. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, the collection contains one result with the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

### DeleteNodes

<span class="api-meta">protected · virtual</span>

When overridden in a derived class, releases the nodes of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void DeleteNodes()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub DeleteNodes()
```

</div>

**Remarks**

The server calls the method when it deletes its address space. The base implementation does nothing.

### Dispose

<span class="api-meta">2 overloads</span>

| Overload | Description |
|---|---|
| [Dispose()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#dispose-noparams) | Releases all resources used by the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/). |
| [Dispose(bool)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#dispose-system-boolean)<span class="api-meta">protected · virtual</span> | Releases the unmanaged resources used by the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and optionally releases the managed resources. |

#### Dispose()

Releases all resources used by the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
public void Dispose()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub Dispose()
```

</div>

**Implements**

[Dispose()](https://learn.microsoft.com/dotnet/api/system.idisposable.dispose)

#### Dispose(bool)

<span class="api-meta">protected · virtual</span>

Releases the unmanaged resources used by the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and optionally releases the managed resources.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void Dispose(bool disposing)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub Dispose(disposing As Boolean)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `disposing` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value true to release both managed and unmanaged resources; otherwise the value false to release only unmanaged resources. |

### ExportNodes

<span class="api-meta">2 overloads</span>

| Overload | Description |
|---|---|
| [ExportNodes()](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#exportnodes-noparams)<span class="api-meta">since v2.11</span> | Exports the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of the node manager using the [Default](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeexportoptions/members#default) options. |
| [ExportNodes(OpcNodeExportOptions)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#exportnodes-opc-uafx-opcnodeexportoptions)<span class="api-meta">since v2.12</span> | Exports the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of the node manager using the `options` specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The server using the node manager has not yet been started. |

#### ExportNodes()

<span class="api-meta">since v2.11</span>

Exports the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of the node manager using the [Default](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeexportoptions/members#default) options.

<div class="api-signature" data-lang="csharp">

```csharp
public IEnumerable<OpcNodeSet> ExportNodes()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ExportNodes() As IEnumerable(Of OpcNodeSet)
```

</div>

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/)&gt;

A sequence of [OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/) instances, one per namespace of the node manager which contains nodes.

**Remarks**

The nodes are exported while the sequence is enumerated; the exception is thrown then as well. Nodes of a namespace which is not maintained by the node manager (see [Namespaces](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#namespaces)) are not exported.

#### ExportNodes(OpcNodeExportOptions)

<span class="api-meta">since v2.12</span>

Exports the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of the node manager using the `options` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IEnumerable<OpcNodeSet> ExportNodes(OpcNodeExportOptions options)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function ExportNodes(
    options As OpcNodeExportOptions) As IEnumerable(Of OpcNodeSet)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `options` | [OpcNodeExportOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeexportoptions/) | The [OpcNodeExportOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeexportoptions/) to use or a null reference (Nothing in Visual Basic) to use the [Default](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeexportoptions/members#default) options. |

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/)&gt;

A sequence of [OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/) instances, one per namespace of the node manager which contains nodes.

**Remarks**

The nodes are exported while the sequence is enumerated; the exception is thrown then as well. Nodes of a namespace which is not maintained by the node manager (see [Namespaces](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#namespaces)) are not exported.

### GetNode

<span class="api-meta">2 overloads · since v2.15</span>

| Overload | Description |
|---|---|
| [GetNode(string)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#getnode-system-string)<span class="api-meta">since v2.15</span> | Retrieves the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) which is maintained by the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of this [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and is known under the `nodePath` specified. |
| [GetNode(OpcNodeId)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#getnode-opc-uafx-opcnodeid)<span class="api-meta">since v2.15</span> | Retrieves the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) which is maintained by the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of this [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and is known under the `nodeId` specified. |

#### GetNode(string)

<span class="api-meta">since v2.15</span>

Retrieves the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) which is maintained by the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of this [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and is known under the `nodePath` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNode GetNode(string nodePath)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function GetNode(nodePath As String) As IOpcNode
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodePath` | [String](https://learn.microsoft.com/dotnet/api/system.string) | A sequence of browse and symbolic names combined using a slash ('/') to describe the 'path' to the node to determine. To query a node using its browse name use the namespace qualified name format 'namespaceIndex:name'; otherwise the 'part of the path' is compared to the symbolic name of the node. |

**Returns**

[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)

An instance implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface its [Name](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#name) or [SymbolicName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#symbolicname) matches the last 'part' in the `nodePath` specified, if found; otherwise a null reference (Nothing in Visual Basic).

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentException](https://learn.microsoft.com/dotnet/api/system.argumentexception) | The `nodePath` is an empty string. |
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodePath` is a null reference (Nothing in Visual Basic). |

**Remarks**

The first 'part' in the `nodePath` shall refer to a unique browse or symbolic name of a node maintained by the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes); otherwise the first node which matches the browse or symbolic name specified is used to continue the node query. Note that this method does not support querying nodes which are organized in an ambiguous way (according to their sub-tree they reside).

#### GetNode(OpcNodeId)

<span class="api-meta">since v2.15</span>

Retrieves the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) which is maintained by the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of this [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and is known under the `nodeId` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public IOpcNode GetNode(OpcNodeId nodeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Function GetNode(nodeId As OpcNodeId) As IOpcNode
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) of the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance to determine. |

**Returns**

[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)

An instance implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface its [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id) attribute is equals to the `nodeId` specified if found; otherwise a null reference (Nothing in Visual Basic).

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `nodeId` is a null reference (Nothing in Visual Basic). |

### ImplementNode

<span class="api-meta">protected · virtual · since v2.9</span>

When implemented in a derived class, implements the logic required to integrate the `node` into the underlying system.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void ImplementNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub ImplementNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | An instance implementing the [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) interface which is to be integrated into the underlying system. |

**Remarks**

This method is called during the whole address space creation. This includes the import of nodes using [ImportNodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#importnodes) and the creation of nodes using [CreateNodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#createnodes). Each node imported / created is passed to this method to integrate it accordingly into the underlying system.

Additionally this method is called after the startup of the server whenever a client adds another node to the address space part(s) maintained by the current [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

### ImportNodes

<span class="api-meta">protected · virtual · since v2.9</span>

When implemented in a derived class, offers the different [OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/)s which are imported prior any other nodes are created within the address space part organized by the current [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IEnumerable<OpcNodeSet> ImportNodes()
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ImportNodes() As IEnumerable(Of OpcNodeSet)
```

</div>

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/)&gt;

A sequence of [OpcNodeSet](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeset/) instances to use to import external stored node information into the address space.

### IsNodeAccessible

<span class="api-meta">protected · virtual · since v2.7</span>

Determines whether the `node` specified is accessible in the `context` and view specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual bool IsNodeAccessible(
    OpcContext context,
    OpcNodeId viewId,
    IOpcNodeInfo node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function IsNodeAccessible(
    context As OpcContext,
    viewId As OpcNodeId,
    node As IOpcNodeInfo) As Boolean
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the operation which accesses the node. |
| `viewId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) of the view to check or [Null](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/members#null) if the node is not accessed through a view. |
| `node` | [IOpcNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/) | The [IOpcNodeInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/) of the node to check. |

**Returns**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value true if the node is accessible; otherwise the value false. The base implementation evaluates [IsAccessible](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnode/members#isaccessible) and, for a variable node, requires an [AccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvariablenode/members#accesslevel) or [UserAccessLevel](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvariablenode/members#useraccesslevel) other than [None](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcaccesslevel/#none).

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context`, `viewId` or `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

The server treats a node which is not accessible like a node which does not exist.

### IsNodeReadyToPublish

<span class="api-meta">protected · since v2.50</span>

Determines a value indicating whether any applied node changes are awaiting to be published by at least one monitored item.

<div class="api-signature" data-lang="csharp">

```csharp
protected bool IsNodeReadyToPublish(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Function IsNodeReadyToPublish(node As IOpcNode) As Boolean
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) its publishing state is to be verified. |

**Returns**

[Boolean](https://learn.microsoft.com/dotnet/api/system.boolean)

The value `true` if the `node` has applied changes which are awaiting to be published; otherwise the value `false`.

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |

### OnAfterRead

<span class="api-meta">protected · virtual</span>

Raises the [AfterRead](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#afterread) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnAfterRead(OpcNodeAccessEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnAfterRead(e As OpcNodeAccessEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAccessEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventargs/) | The event data. |

### OnAfterWrite

<span class="api-meta">protected · virtual</span>

Raises the [AfterWrite](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#afterwrite) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnAfterWrite(OpcNodeAccessEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnAfterWrite(e As OpcNodeAccessEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAccessEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventargs/) | The event data. |

### OnBeforeRead

<span class="api-meta">protected · virtual</span>

Raises the [BeforeRead](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#beforeread) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnBeforeRead(OpcNodeAccessEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnBeforeRead(e As OpcNodeAccessEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAccessEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventargs/) | The event data. |

### OnBeforeWrite

<span class="api-meta">protected · virtual</span>

Raises the [BeforeWrite](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#beforewrite) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnBeforeWrite(OpcNodeAccessEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnBeforeWrite(e As OpcNodeAccessEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcNodeAccessEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventargs/) | The event data. |

### OnMonitoredItemCreated

<span class="api-meta">protected · virtual</span>

Raises the [MonitoredItemCreated](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemcreated) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemCreated(OpcMonitoredItemEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemCreated(e As OpcMonitoredItemEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventargs/) | The event data. |

### OnMonitoredItemDeleted

<span class="api-meta">protected · virtual</span>

Raises the [MonitoredItemDeleted](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemdeleted) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemDeleted(OpcMonitoredItemEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemDeleted(e As OpcMonitoredItemEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventargs/) | The event data. |

### OnMonitoredItemModified

<span class="api-meta">protected · virtual</span>

Raises the [MonitoredItemModified](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemmodified) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemModified(OpcMonitoredItemEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemModified(
    e As OpcMonitoredItemEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventargs/) | The event data. |

### OnMonitoredItemsCreated

<span class="api-meta">protected · virtual · since v2.7</span>

Raises the [MonitoredItemsCreated](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemscreated) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemsCreated(OpcMonitoredItemsEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemsCreated(
    e As OpcMonitoredItemsEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemsEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventargs/) | The event data. |

### OnMonitoredItemsDeleted

<span class="api-meta">protected · virtual · since v2.7</span>

Raises the [MonitoredItemsDeleted](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemsdeleted) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemsDeleted(OpcMonitoredItemsEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemsDeleted(
    e As OpcMonitoredItemsEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemsEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventargs/) | The event data. |

### OnMonitoredItemsModified

<span class="api-meta">protected · virtual · since v2.7</span>

Raises the [MonitoredItemsModified](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#monitoreditemsmodified) event of the [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void OnMonitoredItemsModified(OpcMonitoredItemsEventArgs e)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub OnMonitoredItemsModified(
    e As OpcMonitoredItemsEventArgs)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `e` | [OpcMonitoredItemsEventArgs](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventargs/) | The event data. |

### QueryNode

<span class="api-meta">protected · virtual</span>

When overridden in a derived class, provides the node with the `nodeId` specified which is not part of the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes).

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IOpcNode QueryNode(OpcNodeId nodeId)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function QueryNode(nodeId As OpcNodeId) As IOpcNode
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `nodeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) of the node to provide. |

**Returns**

[IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/)

The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) with the `nodeId` specified, if known; otherwise a null reference (Nothing in Visual Basic). The base implementation returns a null reference.

**Remarks**

The method is called by [GetNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#getnode-opc-uafx-opcnodeid) and when the server looks up a node of the node manager which is not part of the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes).

### Read

<span class="api-meta">protected · virtual</span>

Reads the attribute values requested by the `tokens` specified on behalf of a client.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void Read(
    OpcContext context,
    OpcNodeAccessTokenCollection tokens)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub Read(
    context As OpcContext,
    tokens As OpcNodeAccessTokenCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the read operation. |
| `tokens` | [OpcNodeAccessTokenCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstokencollection/) | The [OpcNodeAccessTokenCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstokencollection/) with one [OpcNodeAccessToken](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstoken/) per attribute value to read, which receives the value and the result of the read. |

**Remarks**

The method raises the [BeforeRead](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#beforeread) event before and the [AfterRead](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#afterread) event after reading, also if reading fails.

### ReadEventHistory

<span class="api-meta">protected · virtual · since v2.54</span>

Reads the history of the events of the `node` specified on behalf of a client.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IEnumerable<OpcEvent> ReadEventHistory(
    OpcContext context,
    IOpcNode node,
    OpcEventFilter eventFilter,
    DateTime? startTime,
    DateTime? endTime,
    bool timeFlowsBackward,
    uint? maxCount)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ReadEventHistory(
    context As OpcContext,
    node As IOpcNode,
    eventFilter As OpcEventFilter,
    startTime As Date?,
    endTime As Date?,
    timeFlowsBackward As Boolean,
    maxCount As UInteger?) As IEnumerable(Of OpcEvent)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the read operation. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose event history is read. |
| `eventFilter` | [OpcEventFilter](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventfilter/) | The [OpcEventFilter](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventfilter/) which specifies the fields of the events to provide. |
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The begin of the time range to read or a null reference (Nothing in Visual Basic) if the range is not limited at its begin. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the time range to read or a null reference (Nothing in Visual Basic) if the range is not limited at its end. |
| `timeFlowsBackward` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value true to provide the events in descending order of their timestamps; otherwise the value false. |
| `maxCount` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[UInt32](https://learn.microsoft.com/dotnet/api/system.uint32)&gt; | The maximum number of events to provide or a null reference (Nothing in Visual Basic) if the number is not limited. |

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/)&gt;

A sequence of the [OpcEvent](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/) instances read or a null reference (Nothing in Visual Basic) if [RetrieveEventHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrieveeventhistoryprovider) provides no provider; in this case the client receives the code [BadNotSupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badnotsupported) for the node.

### ReadHistory

<span class="api-meta">protected · virtual · since v2.51</span>

Reads the history of the values of the `node` specified on behalf of a client.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IEnumerable<OpcHistoryValue> ReadHistory(
    OpcContext context,
    IOpcNode node,
    DateTime? startTime,
    DateTime? endTime,
    bool timeFlowsBackward,
    uint? maxCount,
    OpcReadHistoryOptions options)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ReadHistory(
    context As OpcContext,
    node As IOpcNode,
    startTime As Date?,
    endTime As Date?,
    timeFlowsBackward As Boolean,
    maxCount As UInteger?,
    options As OpcReadHistoryOptions) As IEnumerable(Of OpcHistoryValue)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the read operation. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is read. |
| `startTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The begin of the time range to read or a null reference (Nothing in Visual Basic) if the range is not limited at its begin. |
| `endTime` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[DateTime](https://learn.microsoft.com/dotnet/api/system.datetime)&gt; | The end of the time range to read or a null reference (Nothing in Visual Basic) if the range is not limited at its end. |
| `timeFlowsBackward` | [Boolean](https://learn.microsoft.com/dotnet/api/system.boolean) | The value true to provide the values in descending order of their timestamps; otherwise the value false. |
| `maxCount` | [Nullable](https://learn.microsoft.com/dotnet/api/system.nullable-1)&lt;[UInt32](https://learn.microsoft.com/dotnet/api/system.uint32)&gt; | The maximum number of values to provide or a null reference (Nothing in Visual Basic) if the number is not limited. |
| `options` | [OpcReadHistoryOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcreadhistoryoptions/) | A combination of the [OpcReadHistoryOptions](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcreadhistoryoptions/) flags which specify the values to provide. |

**Returns**

[IEnumerable](https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1)&lt;[OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/)&gt;

A sequence of the [OpcHistoryValue](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistoryvalue/) instances read or a null reference (Nothing in Visual Basic) if [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider; in this case the client receives the code [BadNotSupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badnotsupported) for the node.

### RemoveNode

<span class="api-meta">4 overloads</span>

| Overload | Description |
|---|---|
| [RemoveNode(IOpcNode)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#removenode-opc-uafx-iopcnode) | Removes the `node` specified from the address space of the node manager. |
| [RemoveNode(OpcContext, IOpcNode)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#removenode-opc-uafx-opccontext-opc-uafx-iopcnode)<span class="api-meta">since v2.7</span> | Removes the `node` specified from the address space of the node manager using the `context` specified. |
| [RemoveNode(IOpcNode, OpcLocalReferenceCollection)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#removenode-opc-uafx-iopcnode-opc-uafx-server-opclocalreferencecollection)<span class="api-meta">protected · since v2.7</span> | Removes the `node` specified from the address space of the node manager and collects the `references` to remove from further node managers. |
| [RemoveNode(OpcContext, IOpcNode, OpcLocalReferenceCollection)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#removenode-opc-uafx-opccontext-opc-uafx-iopcnode-opc-uafx-server-opclocalreferencecollection)<span class="api-meta">protected · virtual · since v2.7</span> | Removes the `node` specified from the address space of the node manager using the `context` specified and collects the `references` to remove from further node managers. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The server using the node manager has not yet been started. |

#### RemoveNode(IOpcNode)

Removes the `node` specified from the address space of the node manager.

<div class="api-signature" data-lang="csharp">

```csharp
public void RemoveNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub RemoveNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to remove. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

The references between the node and the nodes of other node managers are removed as well.

#### RemoveNode(OpcContext, IOpcNode)

<span class="api-meta">since v2.7</span>

Removes the `node` specified from the address space of the node manager using the `context` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void RemoveNode(OpcContext context, IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub RemoveNode(context As OpcContext, node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to remove the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to remove. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

The references between the node and the nodes of other node managers are removed as well.

#### RemoveNode(IOpcNode, OpcLocalReferenceCollection)

<span class="api-meta">protected · since v2.7</span>

Removes the `node` specified from the address space of the node manager and collects the `references` to remove from further node managers.

<div class="api-signature" data-lang="csharp">

```csharp
protected void RemoveNode(IOpcNode node, OpcLocalReferenceCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub RemoveNode(
    node As IOpcNode,
    references As OpcLocalReferenceCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to remove. |
| `references` | [OpcLocalReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opclocalreferencecollection/) | The [OpcLocalReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opclocalreferencecollection/) to which the references between the node and the nodes of other node managers are added. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

Unlike [RemoveNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#removenode-opc-uafx-iopcnode) the method does not remove the collected `references` from the other node managers.

#### RemoveNode(OpcContext, IOpcNode, OpcLocalReferenceCollection)

<span class="api-meta">protected · virtual · since v2.7</span>

Removes the `node` specified from the address space of the node manager using the `context` specified and collects the `references` to remove from further node managers.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void RemoveNode(
    OpcContext context,
    IOpcNode node,
    OpcLocalReferenceCollection references)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub RemoveNode(
    context As OpcContext,
    node As IOpcNode,
    references As OpcLocalReferenceCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) to use to remove the node. |
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) to remove. |
| `references` | [OpcLocalReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opclocalreferencecollection/) | The [OpcLocalReferenceCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opclocalreferencecollection/) to which the references between the node and the nodes of other node managers are added. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `context` or `node` is a null reference (Nothing in Visual Basic). |

**Remarks**

The server calls the method also when it removes a node of the node manager. The method does not remove the collected `references` from the other node managers.

### RemoveNotifierNode

<span class="api-meta">protected</span>

Removes the `node` from the collection of 'root' notifiers (= event sources) of the 'Server' node.

<div class="api-signature" data-lang="csharp">

```csharp
protected void RemoveNotifierNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub RemoveNotifierNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance acting as the notifier of the 'Server' node. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The master node has not yet been created, therefore the operation is at the moment not available. |

### ReplaceHistory

<span class="api-meta">protected · virtual</span>

Replaces the history entries of the `values` specified of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection ReplaceHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    OpcValueCollection values)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function ReplaceHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    values As OpcValueCollection) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `values` | [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) | The [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) with the values to replace the existing entries with. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result per value. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, each result has the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

### ReplaceNode

<span class="api-meta">protected · since v2.9</span>

Replaces an existing [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance with the specified `node` without invalidating existing monitored items nor previously defined notifiers.

<div class="api-signature" data-lang="csharp">

```csharp
protected void ReplaceNode(IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Sub ReplaceNode(node As IOpcNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance its [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id) is used to determine existing monitored items, notifiers and nodes to replace with the new one. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `node` is a null reference (Nothing in Visual Basic). |
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The master node has not yet been created, therefore the operation is at the moment not available. |

**Remarks**

To replace an existing node the [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) of the `node` specified needs to match the [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id) of an existing [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance.

This method replaces an existing node and all of its children recursively in the [Nodes](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#nodes) of this [OpcNodeManager](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/) and in the list of notifiers as well in the list of monitored items / nodes.

The caller of this method have to ensure that the `node` specified is as compatible to the previous node as the clients of the server expect. This includes for example the attributes or other metrics of a dedicated type of node to which a client may belong.

### ReportEvent

<span class="api-meta">7 overloads</span>

| Overload | Description |
|---|---|
| [ReportEvent(OpcEventNode)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#reportevent-opc-uafx-opceventnode) | Produces a global event using the `eventNode` specified. |
| [ReportEvent(OpcEventSeverity, OpcText)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#reportevent-opc-uafx-opceventseverity-opc-uafx-opctext) | Produces a global event using the event data specified. |
| [ReportEvent(OpcEventSeverity, OpcText, params object\[\])](#reportevent-opc-uafx-opceventseverity-opc-uafx-opctext-system-object-array) | Produces a global event using the event data specified. |
| [ReportEvent(OpcNodeId, string, OpcEventSeverity, OpcText)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#reportevent-opc-uafx-opcnodeid-system-string-opc-uafx-opceventseverity-opc-uafx-opctext) | Produces a global event using the event data specified. |
| [ReportEvent(OpcNodeId, string, OpcEventSeverity, OpcText, params object\[\])](#reportevent-opc-uafx-opcnodeid-system-string-opc-uafx-opceventseverity-opc-uafx-opctext-system-object-array) | Produces a global event using the event data specified. |
| [ReportEvent(IOpcNode, OpcEventSeverity, OpcText)](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#reportevent-opc-uafx-iopcnode-opc-uafx-opceventseverity-opc-uafx-opctext) | Produces a global event using the event data specified. |
| [ReportEvent(IOpcNode, OpcEventSeverity, OpcText, params object\[\])](#reportevent-opc-uafx-iopcnode-opc-uafx-opceventseverity-opc-uafx-opctext-system-object-array) | Produces a global event using the event data specified. |

**Exceptions (all overloads)**

| Exception | Condition |
|---|---|
| [InvalidOperationException](https://learn.microsoft.com/dotnet/api/system.invalidoperationexception) | The master node has not yet been created, therefore the operation is at the moment not available. |
| [OpcException](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcexception/) | The operation failed (see exception details for more information). |

#### ReportEvent(OpcEventNode)

Produces a global event using the `eventNode` specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(OpcEventNode eventNode)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(eventNode As OpcEventNode)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `eventNode` | [OpcEventNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventnode/) | The [OpcEventNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventnode/) its event information is to be reported as a global event. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `eventNode` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(OpcEventSeverity, OpcText)

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(OpcEventSeverity severity, OpcText message)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(severity As OpcEventSeverity, message As OpcText)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `message` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(OpcEventSeverity, OpcText, params object\[\])

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(
    OpcEventSeverity severity,
    OpcText message,
    params object[] arguments)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(
    severity As OpcEventSeverity,
    message As OpcText,
    ParamArray arguments As Object())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event with format placeholders which where replaced with the `arguments` specified. |
| `arguments` | params [Object](https://learn.microsoft.com/dotnet/api/system.object)[] | The values to place into the `message` using its format placeholders. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `message` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(OpcNodeId, string, OpcEventSeverity, OpcText)

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(
    OpcNodeId sourceNodeId,
    string sourceName,
    OpcEventSeverity severity,
    OpcText message)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(
    sourceNodeId As OpcNodeId,
    sourceName As String,
    severity As OpcEventSeverity,
    message As OpcText)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `sourceNodeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) which is to be used for the [SourceNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcenodeid) property to define the origin of the event produced. |
| `sourceName` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The [string](https://learn.microsoft.com/dotnet/api/system.string) which is to be used for the [SourceName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcename). |
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `message` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(OpcNodeId, string, OpcEventSeverity, OpcText, params object\[\])

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(
    OpcNodeId sourceNodeId,
    string sourceName,
    OpcEventSeverity severity,
    OpcText message,
    params object[] arguments)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(
    sourceNodeId As OpcNodeId,
    sourceName As String,
    severity As OpcEventSeverity,
    message As OpcText,
    ParamArray arguments As Object())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `sourceNodeId` | [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) | The [OpcNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcnodeid/) which is to be used for the [SourceNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcenodeid) property to define the origin of the event produced. |
| `sourceName` | [String](https://learn.microsoft.com/dotnet/api/system.string) | The [string](https://learn.microsoft.com/dotnet/api/system.string) which is to be used for the [SourceName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcename). |
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event with format placeholders which where replaced with the `arguments` specified. |
| `arguments` | params [Object](https://learn.microsoft.com/dotnet/api/system.object)[] | The values to place into the `message` using its format placeholders. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `message` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(IOpcNode, OpcEventSeverity, OpcText)

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(
    IOpcNode source,
    OpcEventSeverity severity,
    OpcText message)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(
    source As IOpcNode,
    severity As OpcEventSeverity,
    message As OpcText)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `source` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance its [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id) is used for the [SourceNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcenodeid) property and its [SymbolicName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#symbolicname) is used for the [SourceName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcename) property to define the origin of the event produced. |
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `source` or `message` is a null reference (Nothing in Visual Basic). |

#### ReportEvent(IOpcNode, OpcEventSeverity, OpcText, params object\[\])

Produces a global event using the event data specified.

<div class="api-signature" data-lang="csharp">

```csharp
public void ReportEvent(
    IOpcNode source,
    OpcEventSeverity severity,
    OpcText message,
    params object[] arguments)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Sub ReportEvent(
    source As IOpcNode,
    severity As OpcEventSeverity,
    message As OpcText,
    ParamArray arguments As Object())
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `source` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) instance its [Id](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#id) is used for the [SourceNodeId](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcenodeid) property and its [SymbolicName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnodeinfo/members#symbolicname) is used for the [SourceName](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcevent/members#sourcename) property to define the origin of the event produced. |
| `severity` | [OpcEventSeverity](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opceventseverity/) | An indication of the urgency of the event. |
| `message` | [OpcText](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opctext/) | A human-readable and localizable text description of the event with format placeholders which where replaced with the `arguments` specified. |
| `arguments` | params [Object](https://learn.microsoft.com/dotnet/api/system.object)[] | The values to place into the `message` using its format placeholders. |

**Exceptions**

| Exception | Condition |
|---|---|
| [ArgumentNullException](https://learn.microsoft.com/dotnet/api/system.argumentnullexception) | The `source` or `message` is a null reference (Nothing in Visual Basic). |

### RetrieveEventHistoryProvider

<span class="api-meta">protected · virtual · since v2.54</span>

Retrieves the provider which provides the history of the events of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IOpcEventHistoryProvider RetrieveEventHistoryProvider(
    IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function RetrieveEventHistoryProvider(
    node As IOpcNode) As IOpcEventHistoryProvider
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose event history is accessed. |

**Returns**

[IOpcEventHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopceventhistoryprovider/)

The [IOpcEventHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopceventhistoryprovider/) to use or a null reference (Nothing in Visual Basic) if the event history of the node is not available. The base implementation returns the `node` if it implements [IOpcEventHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopceventhistoryprovider/).

### RetrieveNodeHistoryProvider

<span class="api-meta">protected · virtual</span>

Retrieves the provider which provides the history of the values of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual IOpcNodeHistoryProvider RetrieveNodeHistoryProvider(
    IOpcNode node)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function RetrieveNodeHistoryProvider(
    node As IOpcNode) As IOpcNodeHistoryProvider
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is accessed. |

**Returns**

[IOpcNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopcnodehistoryprovider/)

The [IOpcNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopcnodehistoryprovider/) to use or a null reference (Nothing in Visual Basic) if the history of the node is not available. The base implementation returns the `node` if it implements [IOpcNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.iopcnodehistoryprovider/).

### UpdateHistory

<span class="api-meta">protected · virtual</span>

Updates the history entries of the `values` specified of the `node` specified.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual OpcStatusCollection UpdateHistory(
    IOpcNode node,
    OpcHistoryModificationInfo modificationInfo,
    OpcValueCollection values)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Function UpdateHistory(
    node As IOpcNode,
    modificationInfo As OpcHistoryModificationInfo,
    values As OpcValueCollection) As OpcStatusCollection
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `node` | [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) | The [IOpcNode](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.iopcnode/) whose history is changed. |
| `modificationInfo` | [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) | The [OpcHistoryModificationInfo](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opchistorymodificationinfo/) which describes the modification. |
| `values` | [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) | The [OpcValueCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcvaluecollection/) with the values to create or to replace the existing entries with. |

**Returns**

[OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/)

An [OpcStatusCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscollection/) with the result per value. If [RetrieveNodeHistoryProvider](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#retrievenodehistoryprovider) provides no provider, each result has the code [BadHistoryOperationUnsupported](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opcstatuscode/#badhistoryoperationunsupported).

### Write

<span class="api-meta">protected · virtual</span>

Writes the attribute values provided by the `tokens` specified on behalf of a client.

<div class="api-signature" data-lang="csharp">

```csharp
protected virtual void Write(
    OpcContext context,
    OpcNodeAccessTokenCollection tokens)
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Protected Overridable Sub Write(
    context As OpcContext,
    tokens As OpcNodeAccessTokenCollection)
```

</div>

**Parameters**

| Name | Type | Description |
|---|---|---|
| `context` | [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) | The [OpcContext](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.opccontext/) of the write operation. |
| `tokens` | [OpcNodeAccessTokenCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstokencollection/) | The [OpcNodeAccessTokenCollection](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstokencollection/) with one [OpcNodeAccessToken](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesstoken/) per attribute value to write, which receives the result of the write. |

**Remarks**

The method raises the [BeforeWrite](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#beforewrite) event before and the [AfterWrite](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#afterwrite) event after writing, also if writing fails.

## Events

### AfterRead

Occurs after the node manager has read attribute values of its nodes on behalf of a client (see [Read](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#read)), also if reading has failed.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAccessEventHandler AfterRead
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event AfterRead As OpcNodeAccessEventHandler
```

</div>

**Event type**

[OpcNodeAccessEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventhandler/)

### AfterWrite

Occurs after the node manager has written attribute values of its nodes on behalf of a client (see [Write](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#write)), also if writing has failed.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAccessEventHandler AfterWrite
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event AfterWrite As OpcNodeAccessEventHandler
```

</div>

**Event type**

[OpcNodeAccessEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventhandler/)

### BeforeRead

Occurs before the node manager reads attribute values of its nodes on behalf of a client (see [Read](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#read)).

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAccessEventHandler BeforeRead
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event BeforeRead As OpcNodeAccessEventHandler
```

</div>

**Event type**

[OpcNodeAccessEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventhandler/)

### BeforeWrite

Occurs before the node manager writes attribute values of its nodes on behalf of a client (see [Write](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodemanager/members#write)).

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcNodeAccessEventHandler BeforeWrite
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event BeforeWrite As OpcNodeAccessEventHandler
```

</div>

**Event type**

[OpcNodeAccessEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcnodeaccesseventhandler/)

### MonitoredItemCreated

Occurs when a new monitored item is created through a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/).

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemEventHandler MonitoredItemCreated
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemCreated As OpcMonitoredItemEventHandler
```

</div>

**Event type**

[OpcMonitoredItemEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventhandler/)

### MonitoredItemDeleted

Occurs when an existing monitored item of a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/) has been deleted.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemEventHandler MonitoredItemDeleted
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemDeleted As OpcMonitoredItemEventHandler
```

</div>

**Event type**

[OpcMonitoredItemEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventhandler/)

### MonitoredItemModified

Occurs when an existing monitored item of a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/) has been modified.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemEventHandler MonitoredItemModified
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemModified As OpcMonitoredItemEventHandler
```

</div>

**Event type**

[OpcMonitoredItemEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemeventhandler/)

### MonitoredItemsCreated

<span class="api-meta">since v2.7</span>

Occurs when a set of new monitored items is created through a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/).

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemsEventHandler MonitoredItemsCreated
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemsCreated As OpcMonitoredItemsEventHandler
```

</div>

**Event type**

[OpcMonitoredItemsEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventhandler/)

### MonitoredItemsDeleted

<span class="api-meta">since v2.7</span>

Occurs when a set of existing monitored items of a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/) has been deleted.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemsEventHandler MonitoredItemsDeleted
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemsDeleted As OpcMonitoredItemsEventHandler
```

</div>

**Event type**

[OpcMonitoredItemsEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventhandler/)

### MonitoredItemsModified

<span class="api-meta">since v2.7</span>

Occurs when a set of existing monitored items of a [OpcSession](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcsession/) has been modified.

<div class="api-signature" data-lang="csharp">

```csharp
public event OpcMonitoredItemsEventHandler MonitoredItemsModified
```

</div>

<div class="api-signature" data-lang="vbnet">

```vbnet
Public Event MonitoredItemsModified As OpcMonitoredItemsEventHandler
```

</div>

**Event type**

[OpcMonitoredItemsEventHandler](https://www.traeger.de/en/docs/development/opcua/api/v2.59/opc.uafx.server.opcmonitoreditemseventhandler/)
