diff --git a/Applications/Quickstarts.Servers/SampleNodeManager/DataChangeMonitoredItem.cs b/Applications/Quickstarts.Servers/SampleNodeManager/DataChangeMonitoredItem.cs
index f24d3ed025..e17a44260c 100644
--- a/Applications/Quickstarts.Servers/SampleNodeManager/DataChangeMonitoredItem.cs
+++ b/Applications/Quickstarts.Servers/SampleNodeManager/DataChangeMonitoredItem.cs
@@ -465,6 +465,11 @@ namespace Opc.Ua.Sample
}
}
+ public void SetupResendDataTrigger()
+ {
+ // Does nothing since this type of Monitored Item does not support Resend data functionality
+ }
+
///
/// Returns the results for the create request.
///
diff --git a/Applications/Quickstarts.Servers/SampleNodeManager/SampleNodeManager.cs b/Applications/Quickstarts.Servers/SampleNodeManager/SampleNodeManager.cs
index 3cf7976040..93c4b49068 100644
--- a/Applications/Quickstarts.Servers/SampleNodeManager/SampleNodeManager.cs
+++ b/Applications/Quickstarts.Servers/SampleNodeManager/SampleNodeManager.cs
@@ -2964,20 +2964,14 @@ namespace Opc.Ua.Sample
// owned by this node manager.
processedItems[ii] = true;
- var monitoredItem = monitoredItems[ii];
- transferredItems.Add(monitoredItem);
+ transferredItems.Add(monitoredItems[ii]);
- if (sendInitialValues && !monitoredItem.IsReadyToPublish)
+ if (sendInitialValues)
{
- if (monitoredItem is DataChangeMonitoredItem dataChangeMonitoredItem)
- {
- errors[ii] = ReadInitialValue(systemContext, monitoredNode, dataChangeMonitoredItem, true);
- }
- }
- else
- {
- errors[ii] = StatusCodes.Good;
+ monitoredItems[ii].SetupResendDataTrigger();
}
+
+ errors[ii] = StatusCodes.Good;
}
}
@@ -2998,6 +2992,7 @@ namespace Opc.Ua.Sample
// does nothing.
}
+
///
/// Changes the monitoring mode for a set of monitored items.
///
diff --git a/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs b/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs
index dd4317b175..297c0c2b5d 100644
--- a/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs
+++ b/Libraries/Opc.Ua.Server/Diagnostics/CustomNodeManager.cs
@@ -4234,20 +4234,14 @@ namespace Opc.Ua.Server
// owned by this node manager.
processedItems[ii] = true;
- var monitoredItem = monitoredItems[ii];
- transferredItems.Add(monitoredItem);
+ transferredItems.Add(monitoredItems[ii]);
- if (sendInitialValues && !monitoredItem.IsReadyToPublish)
+ if (sendInitialValues)
{
- if (monitoredItem is IDataChangeMonitoredItem2 dataChangeMonitoredItem)
- {
- errors[ii] = ReadInitialValue(systemContext, handle, dataChangeMonitoredItem);
- }
- }
- else
- {
- errors[ii] = StatusCodes.Good;
+ monitoredItems[ii].SetupResendDataTrigger();
}
+
+ errors[ii] = StatusCodes.Good;
}
}
diff --git a/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs b/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs
index 1da77d5c39..92b7de79b5 100644
--- a/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs
+++ b/Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs
@@ -199,6 +199,17 @@ namespace Opc.Ua.Server
}
}
#endif
+
+ // hookup server ResendData method.
+
+ ResendDataMethodState resendData = (ResendDataMethodState)FindPredefinedNode(
+ MethodIds.Server_ResendData,
+ typeof(ResendDataMethodState));
+
+ if (resendData != null)
+ {
+ resendData.OnCallMethod = OnResendData;
+ }
}
}
@@ -282,6 +293,46 @@ namespace Opc.Ua.Server
return StatusCodes.BadSubscriptionIdInvalid;
}
+ ///
+ /// Called when a client initiates resending of all data monitored items in a Subscription.
+ ///
+ public ServiceResult OnResendData(
+ ISystemContext context,
+ MethodState method,
+ IList