diff --git a/Samples/Client.Net4/UA Sample Client.csproj b/Samples/Client.Net4/UA Sample Client.csproj
index 9358bad22..c8877628a 100644
--- a/Samples/Client.Net4/UA Sample Client.csproj
+++ b/Samples/Client.Net4/UA Sample Client.csproj
@@ -40,7 +40,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs b/Samples/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs
index 0bc77ec2b..f04342891 100644
--- a/Samples/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs
+++ b/Samples/ClientControls.Net4/Configuration/Common (OLD)/NumericValueEditDlg.cs
@@ -147,15 +147,15 @@ private void SetLimits(Type type)
if (type == typeof(float))
{
- ValueCTRL.Minimum = Decimal.MinValue;
- ValueCTRL.Maximum = Decimal.MaxValue;
+ ValueCTRL.Minimum = decimal.MinValue;
+ ValueCTRL.Maximum = decimal.MaxValue;
ValueCTRL.DecimalPlaces = 6;
}
if (type == typeof(double))
{
- ValueCTRL.Minimum = Decimal.MinValue;
- ValueCTRL.Maximum = Decimal.MaxValue;
+ ValueCTRL.Minimum = decimal.MinValue;
+ ValueCTRL.Maximum = decimal.MaxValue;
ValueCTRL.DecimalPlaces = 15;
}
}
diff --git a/Samples/ClientControls.Net4/Configuration/SelectProfileCtrl.cs b/Samples/ClientControls.Net4/Configuration/SelectProfileCtrl.cs
index 5fb5c80d8..bfedc5000 100644
--- a/Samples/ClientControls.Net4/Configuration/SelectProfileCtrl.cs
+++ b/Samples/ClientControls.Net4/Configuration/SelectProfileCtrl.cs
@@ -90,7 +90,7 @@ public Opc.Ua.Security.ListOfSecurityProfiles Profiles
builder.Append(", ");
}
- builder.Append(SecurityPolicies.GetDisplayName(value[ii].ProfileUri));
+ builder.Append(SecurityPolicies.Default.GetDisplayName(value[ii].ProfileUri));
}
}
}
diff --git a/Samples/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs b/Samples/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs
index e8dd4fc41..8eb7c15cd 100644
--- a/Samples/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs
+++ b/Samples/ClientControls.Net4/Endpoints/ConfiguredServerDlg.cs
@@ -209,7 +209,7 @@ public EndpointDescriptionString(EndpointDescription endpointDescription)
{
m_endpointDescription = endpointDescription;
m_protocol = new Protocol(endpointDescription);
- m_currentPolicy = SecurityPolicies.GetDisplayName(endpointDescription.SecurityPolicyUri);
+ m_currentPolicy = SecurityPolicies.Default.GetDisplayName(endpointDescription.SecurityPolicyUri);
m_messageSecurityMode = endpointDescription.SecurityMode;
switch (m_endpointDescription.EncodingSupport)
@@ -280,7 +280,7 @@ private void BuildEndpointDescription()
{
m_stringRepresentation = m_protocol.ToString() + " - ";
m_stringRepresentation += m_endpointDescription.SecurityMode + " - ";
- m_stringRepresentation += SecurityPolicies.GetDisplayName(m_endpointDescription.SecurityPolicyUri) + " - ";
+ m_stringRepresentation += SecurityPolicies.Default.GetDisplayName(m_endpointDescription.SecurityPolicyUri) + " - ";
switch (m_endpointDescription.EncodingSupport)
{
@@ -585,7 +585,7 @@ private EndpointDescription FindBestEndpointDescription(List endpoints)
// set all available security policies.
if (m_showAllOptions)
{
- SecurityPolicyCB.Items.AddRange(SecurityPolicies.GetDisplayNames());
+ SecurityPolicyCB.Items.AddRange(SecurityPolicies.Default.GetDisplayNames());
}
// find all unique security policies.
@@ -899,7 +899,7 @@ private void InitializeSecurityPolicies(List endpoints)
continue;
}
- string policyName = SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri);
+ string policyName = SecurityPolicies.Default.GetDisplayName(endpoint.SecurityPolicyUri);
if (policyName != null)
{
@@ -918,7 +918,7 @@ private void InitializeSecurityPolicies(List endpoints)
// add at least one policy.
if (SecurityPolicyCB.Items.Count == 0)
{
- SecurityPolicyCB.Items.Add(SecurityPolicies.GetDisplayName(SecurityPolicies.None));
+ SecurityPolicyCB.Items.Add(SecurityPolicies.Default.GetDisplayName(SecurityPolicies.None));
}
// set the current value.
@@ -955,13 +955,13 @@ private void InitializeEncodings(List endpoints, EndpointDe
if (endpoint != null)
{
Protocol protocol = new Protocol(endpoint);
- String securityPolicy = SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri);
+ String securityPolicy = SecurityPolicies.Default.GetDisplayName(endpoint.SecurityPolicyUri);
foreach (EndpointDescription endpointDescription in endpoints)
{
if ((protocol.Matches(Utils.ParseUri(endpointDescription.EndpointUrl))) &&
(endpoint.SecurityMode == endpointDescription.SecurityMode) &&
- (securityPolicy == SecurityPolicies.GetDisplayName(endpointDescription.SecurityPolicyUri)))
+ (securityPolicy == SecurityPolicies.Default.GetDisplayName(endpointDescription.SecurityPolicyUri)))
{
switch (endpointDescription.EncodingSupport)
{
@@ -1355,7 +1355,7 @@ private EndpointDescription CreateDescriptionFromSelections()
endpoint = new EndpointDescription();
endpoint.EndpointUrl = builder.ToString();
endpoint.SecurityMode = (MessageSecurityMode)SecurityModeCB.SelectedItem;
- endpoint.SecurityPolicyUri = SecurityPolicies.GetUri((string)SecurityPolicyCB.SelectedItem);
+ endpoint.SecurityPolicyUri = SecurityPolicies.Default.GetUri((string)SecurityPolicyCB.SelectedItem);
endpoint.Server.ApplicationName = new LocalizedText(endpoint.EndpointUrl);
endpoint.Server.ApplicationType = ApplicationType.Server;
endpoint.Server.ApplicationUri = endpoint.EndpointUrl;
@@ -1791,7 +1791,7 @@ private void UpdateStatus()
{
m_statusObject.SetStatus(StatusChannel.SecurityPolicyUri, "Error: Security Policy URI is missing.", StatusType.Warning);
}
- else if (string.IsNullOrEmpty(SecurityPolicies.GetDisplayName(m_currentDescription.SecurityPolicyUri)))
+ else if (string.IsNullOrEmpty(SecurityPolicies.Default.GetDisplayName(m_currentDescription.SecurityPolicyUri)))
{
m_statusObject.SetStatus(StatusChannel.SecurityPolicyUri, "Error: Security Policy URI is invalid.", StatusType.Warning);
}
diff --git a/Samples/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs b/Samples/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs
index fbf9df206..c38ed77bc 100644
--- a/Samples/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs
+++ b/Samples/ClientControls.Net4/Endpoints/ConfiguredServerListCtrl.cs
@@ -152,7 +152,7 @@ protected override async Task UpdateItemAsync(ListViewItem listItem, object item
listItem.SubItems[3].Text = String.Format(
"{0}/{1}",
- SecurityPolicies.GetDisplayName(endpoint.Description.SecurityPolicyUri),
+ SecurityPolicies.Default.GetDisplayName(endpoint.Description.SecurityPolicyUri),
endpoint.Description.SecurityMode);
listItem.SubItems[4].Text = "";
diff --git a/Samples/ClientControls.Net4/UA Client Controls.csproj b/Samples/ClientControls.Net4/UA Client Controls.csproj
index c1684f7e6..d3133fe03 100644
--- a/Samples/ClientControls.Net4/UA Client Controls.csproj
+++ b/Samples/ClientControls.Net4/UA Client Controls.csproj
@@ -185,16 +185,16 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/Controls.Net4/Common/PerformanceTestDlg.cs b/Samples/Controls.Net4/Common/PerformanceTestDlg.cs
index eae351d94..2bc4c1b98 100644
--- a/Samples/Controls.Net4/Common/PerformanceTestDlg.cs
+++ b/Samples/Controls.Net4/Common/PerformanceTestDlg.cs
@@ -159,7 +159,7 @@ private void SaveResults(string filePath)
writer.Write("{0}", uri);
writer.Write(",{0}", uri.Scheme);
writer.Write(",{0}", endpoint.SecurityMode);
- writer.Write(",{0}", SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri));
+ writer.Write(",{0}", SecurityPolicies.Default.GetDisplayName(endpoint.SecurityPolicyUri));
writer.Write(",{0}", (results[ii].Endpoint.Configuration.UseBinaryEncoding) ? "Binary" : "XML");
foreach (KeyValuePair result in results[ii].Results)
diff --git a/Samples/Controls.Net4/Sessions/SecuritySettingsDlg.cs b/Samples/Controls.Net4/Sessions/SecuritySettingsDlg.cs
index 147c63e41..0a3dce26a 100644
--- a/Samples/Controls.Net4/Sessions/SecuritySettingsDlg.cs
+++ b/Samples/Controls.Net4/Sessions/SecuritySettingsDlg.cs
@@ -57,7 +57,7 @@ public SecuritySettingsDlg()
SecurityModeCB.Items.Add(value);
}
- SecurityPolicyUriCB.Items.AddRange(SecurityPolicies.GetDisplayNames());
+ SecurityPolicyUriCB.Items.AddRange(SecurityPolicies.Default.GetDisplayNames());
}
///
@@ -78,7 +78,7 @@ public bool ShowDialog(ITelemetryContext telemetry, ref MessageSecurityMode secu
if (!String.IsNullOrEmpty(securityPolicyUri))
{
- SecurityPolicyUriCB.SelectedItem = SecurityPolicies.GetDisplayName(securityPolicyUri);
+ SecurityPolicyUriCB.SelectedItem = SecurityPolicies.Default.GetDisplayName(securityPolicyUri);
}
// show dialog.
@@ -88,7 +88,7 @@ public bool ShowDialog(ITelemetryContext telemetry, ref MessageSecurityMode secu
}
securityMode = (MessageSecurityMode)SecurityModeCB.SelectedItem;
- securityPolicyUri = SecurityPolicies.GetUri((string)SecurityPolicyUriCB.SelectedItem);
+ securityPolicyUri = SecurityPolicies.Default.GetUri((string)SecurityPolicyUriCB.SelectedItem);
useNativeStack = UseNativeStackCK.Checked;
return true;
diff --git a/Samples/Controls.Net4/Subscriptions/DataChangeFilterEditDlg.cs b/Samples/Controls.Net4/Subscriptions/DataChangeFilterEditDlg.cs
index 9eca4c4ca..ac0b2215d 100644
--- a/Samples/Controls.Net4/Subscriptions/DataChangeFilterEditDlg.cs
+++ b/Samples/Controls.Net4/Subscriptions/DataChangeFilterEditDlg.cs
@@ -117,8 +117,8 @@ private void DeadbandTypeCB_SelectedIndexChanged(object sender, EventArgs e)
}
else
{
- DeadbandNC.Minimum = Decimal.MinValue;
- DeadbandNC.Maximum = Decimal.MaxValue;
+ DeadbandNC.Minimum = decimal.MinValue;
+ DeadbandNC.Maximum = decimal.MaxValue;
}
}
}
diff --git a/Samples/Controls.Net4/UA Sample Controls.csproj b/Samples/Controls.Net4/UA Sample Controls.csproj
index df79236eb..300507ba6 100644
--- a/Samples/Controls.Net4/UA Sample Controls.csproj
+++ b/Samples/Controls.Net4/UA Sample Controls.csproj
@@ -104,10 +104,10 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/GDS/Client/GlobalDiscoveryClient.csproj b/Samples/GDS/Client/GlobalDiscoveryClient.csproj
index 3c302f117..ce6540c21 100644
--- a/Samples/GDS/Client/GlobalDiscoveryClient.csproj
+++ b/Samples/GDS/Client/GlobalDiscoveryClient.csproj
@@ -50,10 +50,10 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/GDS/ClientControls/Controls/DiscoveryControl.cs b/Samples/GDS/ClientControls/Controls/DiscoveryControl.cs
index d473473e2..e914c68c7 100644
--- a/Samples/GDS/ClientControls/Controls/DiscoveryControl.cs
+++ b/Samples/GDS/ClientControls/Controls/DiscoveryControl.cs
@@ -611,7 +611,7 @@ private void ShowEndpointDescriptions(List endpoints)
row[0] = endpoint.EndpointUrl;
row[1] = endpoint.SecurityMode.ToString();
- row[2] = SecurityPolicies.GetDisplayName(endpoint.SecurityPolicyUri);
+ row[2] = SecurityPolicies.Default.GetDisplayName(endpoint.SecurityPolicyUri);
row[3] = endpoint;
EndpointsTable.Rows.Add(row);
diff --git a/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj b/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
index a139aa620..303ae8c34 100644
--- a/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
+++ b/Samples/GDS/ClientControls/GlobalDiscoveryClientControls.csproj
@@ -30,10 +30,10 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj b/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
index 68f694802..2c0637c7c 100644
--- a/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
+++ b/Samples/GDS/ConsoleServer/NetCoreGlobalDiscoveryServer.csproj
@@ -20,9 +20,9 @@
-
-
-
+
+
+
diff --git a/Samples/GDS/ConsoleServer/Program.cs b/Samples/GDS/ConsoleServer/Program.cs
index d893fc9ea..d5fef01bd 100644
--- a/Samples/GDS/ConsoleServer/Program.cs
+++ b/Samples/GDS/ConsoleServer/Program.cs
@@ -531,23 +531,22 @@ private void EventStatus(ISession session, SessionEventReason reason)
private void PrintSessionStatus(ISession session, string reason, bool lastContact = false)
{
- lock (session.DiagnosticsLock)
+ // The session owns its diagnostics lock and no longer exposes it;
+ // ReadDiagnostics applies each projection while holding that lock.
+ string item = Utils.Format("{0,9}:{1,20}:", reason, session.ReadDiagnostics(d => d.SessionName));
+ if (lastContact)
{
- string item = Utils.Format("{0,9}:{1,20}:", reason, session.SessionDiagnostics.SessionName);
- if (lastContact)
- {
- item += Utils.Format("Last Event:{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime());
- }
- else
+ item += Utils.Format("Last Event:{0:HH:mm:ss}", session.ReadDiagnostics(d => d.ClientLastContactTime).ToLocalTime());
+ }
+ else
+ {
+ if (session.Identity != null)
{
- if (session.Identity != null)
- {
- item += Utils.Format(":{0,20}", session.Identity.DisplayName);
- }
- item += Utils.Format(":{0}", session.Id);
+ item += Utils.Format(":{0,20}", session.Identity.DisplayName);
}
- Console.WriteLine(item);
+ item += Utils.Format(":{0}", session.Id);
}
+ Console.WriteLine(item);
}
private async void StatusThreadAsync()
diff --git a/Samples/GDS/Server/GlobalDiscoveryServer.csproj b/Samples/GDS/Server/GlobalDiscoveryServer.csproj
index dd886e0c9..6b5532a35 100644
--- a/Samples/GDS/Server/GlobalDiscoveryServer.csproj
+++ b/Samples/GDS/Server/GlobalDiscoveryServer.csproj
@@ -40,13 +40,13 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/LDS/ConsoleServer/ConsoleLds.csproj b/Samples/LDS/ConsoleServer/ConsoleLds.csproj
index 0a140ecd3..a57ebd05b 100644
--- a/Samples/LDS/ConsoleServer/ConsoleLds.csproj
+++ b/Samples/LDS/ConsoleServer/ConsoleLds.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/Samples/Opc.Ua.Sample/Base/CustomNodeManager.cs b/Samples/Opc.Ua.Sample/Base/CustomNodeManager.cs
index c3a16f537..283a6d1e8 100644
--- a/Samples/Opc.Ua.Sample/Base/CustomNodeManager.cs
+++ b/Samples/Opc.Ua.Sample/Base/CustomNodeManager.cs
@@ -2935,6 +2935,32 @@ public virtual void TransferMonitoredItems(
IList monitoredItems,
IList processedItems,
IList errors)
+ {
+ TransferMonitoredItems(
+ context,
+ sendInitialValues,
+ monitoredItems,
+ processedItems,
+ errors,
+ new MonitoredItemTransferOptions());
+ }
+
+ ///
+ /// Transfers a set of monitored items.
+ ///
+ /// The context.
+ /// Whether the subscription should send initial values after transfer.
+ /// The set of monitoring items to update.
+ /// The list of bool with items that were already processed.
+ /// Any errors.
+ /// Controls how the transfer is executed.
+ public virtual void TransferMonitoredItems(
+ OperationContext context,
+ bool sendInitialValues,
+ IList monitoredItems,
+ IList processedItems,
+ IList errors,
+ MonitoredItemTransferOptions transferOptions)
{
ServerSystemContext systemContext = m_systemContext.Copy(context);
IList transferredItems = new List();
@@ -2964,7 +2990,7 @@ public virtual void TransferMonitoredItems(
// owned by this node manager.
processedItems[ii] = true;
transferredItems.Add(monitoredItems[ii]);
- if (sendInitialValues)
+ if (sendInitialValues && !transferOptions.DeferInitialValues)
{
monitoredItems[ii].SetupResendDataTrigger();
}
diff --git a/Samples/Opc.Ua.Sample/Base/SampleNodeManager.cs b/Samples/Opc.Ua.Sample/Base/SampleNodeManager.cs
index cf18c6302..310b00a9b 100644
--- a/Samples/Opc.Ua.Sample/Base/SampleNodeManager.cs
+++ b/Samples/Opc.Ua.Sample/Base/SampleNodeManager.cs
@@ -2956,6 +2956,32 @@ public virtual void TransferMonitoredItems(
IList monitoredItems,
IList processedItems,
IList errors)
+ {
+ TransferMonitoredItems(
+ context,
+ sendInitialValues,
+ monitoredItems,
+ processedItems,
+ errors,
+ new MonitoredItemTransferOptions());
+ }
+
+ ///
+ /// Transfers a set of monitored items.
+ ///
+ /// The context.
+ /// Whether the subscription should send initial values after transfer.
+ /// The set of monitoring items to update.
+ /// The list of bool with items that were already processed.
+ /// Any errors.
+ /// Controls how the transfer is executed.
+ public virtual void TransferMonitoredItems(
+ OperationContext context,
+ bool sendInitialValues,
+ IList monitoredItems,
+ IList processedItems,
+ IList errors,
+ MonitoredItemTransferOptions transferOptions)
{
ServerSystemContext systemContext = m_systemContext.Copy(context);
IList transferredItems = new List();
@@ -2982,7 +3008,7 @@ public virtual void TransferMonitoredItems(
processedItems[ii] = true;
transferredItems.Add(monitoredItems[ii]);
- if (sendInitialValues)
+ if (sendInitialValues && !transferOptions.DeferInitialValues)
{
monitoredItems[ii].SetupResendDataTrigger();
}
diff --git a/Samples/Opc.Ua.Sample/MemoryBuffer/MemoryBufferBrowser.cs b/Samples/Opc.Ua.Sample/MemoryBuffer/MemoryBufferBrowser.cs
index 1e103b397..ebe17bc4c 100644
--- a/Samples/Opc.Ua.Sample/MemoryBuffer/MemoryBufferBrowser.cs
+++ b/Samples/Opc.Ua.Sample/MemoryBuffer/MemoryBufferBrowser.cs
@@ -80,51 +80,50 @@ public MemoryBufferBrowser(
///
public override IReference Next()
{
- lock (DataLock)
- {
- IReference reference = null;
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ IReference reference = null;
- // enumerate pre-defined references.
- // always call first to ensure any pushed-back references are returned first.
- reference = base.Next();
+ // enumerate pre-defined references.
+ // always call first to ensure any pushed-back references are returned first.
+ reference = base.Next();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
+ }
- if (m_stage == Stage.Begin)
- {
- m_stage = Stage.Components;
- m_position = 0;
- }
+ if (m_stage == Stage.Begin)
+ {
+ m_stage = Stage.Components;
+ m_position = 0;
+ }
- // don't start browsing huge number of references when only internal references are requested.
- if (InternalOnly)
- {
- return null;
- }
+ // don't start browsing huge number of references when only internal references are requested.
+ if (InternalOnly)
+ {
+ return null;
+ }
- // enumerate components.
- if (m_stage == Stage.Components)
+ // enumerate components.
+ if (m_stage == Stage.Components)
+ {
+ if (IsRequired(ReferenceTypeIds.HasComponent, false))
{
- if (IsRequired(ReferenceTypeIds.HasComponent, false))
- {
- reference = NextChild();
+ reference = NextChild();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
}
-
- m_stage = Stage.ModelParents;
- m_position = 0;
}
- // all done.
- return null;
+ m_stage = Stage.ModelParents;
+ m_position = 0;
}
+
+ // all done.
+ return null;
}
#endregion
diff --git a/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj b/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
index abac44a99..34782cc4c 100644
--- a/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
+++ b/Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj
@@ -32,9 +32,9 @@
-
-
-
+
+
+
diff --git a/Samples/Opc.Ua.Sample/TestData/HistoryDataReader.cs b/Samples/Opc.Ua.Sample/TestData/HistoryDataReader.cs
index 38621ab77..e68ade1dd 100644
--- a/Samples/Opc.Ua.Sample/TestData/HistoryDataReader.cs
+++ b/Samples/Opc.Ua.Sample/TestData/HistoryDataReader.cs
@@ -43,7 +43,7 @@ namespace TestData
///
/// A class used to read values from a history data source.
///
- public class HistoryDataReader : IDisposable
+ public class HistoryDataReader : IHistoryContinuationPoint
{
#region Constructors
///
diff --git a/Samples/Opc.Ua.Sample/TestData/TestDataNodeManager.cs b/Samples/Opc.Ua.Sample/TestData/TestDataNodeManager.cs
index bee13a7da..8a54e5fcb 100644
--- a/Samples/Opc.Ua.Sample/TestData/TestDataNodeManager.cs
+++ b/Samples/Opc.Ua.Sample/TestData/TestDataNodeManager.cs
@@ -436,7 +436,7 @@ protected virtual HistoryDataReader RestoreDataReader(Opc.Ua.Server.ServerSystem
return null;
}
- HistoryDataReader reader = context.OperationContext.Session.RestoreHistoryContinuationPoint(continuationPoint.ToByteString()) as HistoryDataReader;
+ HistoryDataReader reader = context.OperationContext.Session.ContinuationPoints.RestoreHistory(continuationPoint.ToByteString()) as HistoryDataReader;
if (reader == null)
{
@@ -456,7 +456,7 @@ protected virtual void SaveDataReader(Opc.Ua.Server.ServerSystemContext context,
return;
}
- context.OperationContext.Session.SaveHistoryContinuationPoint(reader.Id, reader);
+ context.OperationContext.Session.ContinuationPoints.SaveHistory(reader);
}
///
diff --git a/Samples/ReferenceClient/Reference Client.csproj b/Samples/ReferenceClient/Reference Client.csproj
index 15c88e48d..e143cdcf6 100644
--- a/Samples/ReferenceClient/Reference Client.csproj
+++ b/Samples/ReferenceClient/Reference Client.csproj
@@ -26,16 +26,16 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/ReferenceServer/Reference Server.csproj b/Samples/ReferenceServer/Reference Server.csproj
index fba92751e..b364bada4 100644
--- a/Samples/ReferenceServer/Reference Server.csproj
+++ b/Samples/ReferenceServer/Reference Server.csproj
@@ -30,13 +30,13 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
4.4.0
diff --git a/Samples/Server.Net4/ServerDiagnosticsCtrl.cs b/Samples/Server.Net4/ServerDiagnosticsCtrl.cs
index e00bd1fb8..27407ea91 100644
--- a/Samples/Server.Net4/ServerDiagnosticsCtrl.cs
+++ b/Samples/Server.Net4/ServerDiagnosticsCtrl.cs
@@ -103,24 +103,23 @@ private void UpdateSessions()
{
ISession session = sessions[ii];
- lock (session.DiagnosticsLock)
- {
- ListViewItem item = new ListViewItem(session.SessionDiagnostics.SessionName);
+ // The session owns its diagnostics lock and no longer exposes it;
+ // ReadDiagnostics applies each projection while holding that lock.
+ ListViewItem item = new ListViewItem(session.ReadDiagnostics(d => d.SessionName));
- if (session.Identity != null)
- {
- item.SubItems.Add(session.Identity.DisplayName);
- }
- else
- {
- item.SubItems.Add(String.Empty);
- }
+ if (session.Identity != null)
+ {
+ item.SubItems.Add(session.Identity.DisplayName);
+ }
+ else
+ {
+ item.SubItems.Add(String.Empty);
+ }
- item.SubItems.Add(String.Format("{0}", session.Id));
- item.SubItems.Add(String.Format("{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime()));
+ item.SubItems.Add(String.Format("{0}", session.Id));
+ item.SubItems.Add(String.Format("{0:HH:mm:ss}", session.ReadDiagnostics(d => d.ClientLastContactTime).ToLocalTime()));
- SessionsLV.Items.Add(item);
- }
+ SessionsLV.Items.Add(item);
}
// adjust
@@ -148,10 +147,9 @@ private void UpdateSubscriptions()
item.SubItems.Add(String.Format("{0}", (int)subscription.PublishingInterval));
item.SubItems.Add(String.Format("{0}", subscription.MonitoredItemCount));
- lock (subscription.DiagnosticsLock)
- {
- item.SubItems.Add(String.Format("{0}", subscription.Diagnostics.NextSequenceNumber));
- }
+ // Same as above: the subscription reads its own diagnostics under the
+ // lock it owns, replacing the former DiagnosticsLock property.
+ item.SubItems.Add(String.Format("{0}", subscription.ReadDiagnostics(d => d.NextSequenceNumber)));
SubscriptionsLV.Items.Add(item);
}
diff --git a/Samples/Server.Net4/UA Sample Server.csproj b/Samples/Server.Net4/UA Sample Server.csproj
index b2eb0c161..8ff6bec0a 100644
--- a/Samples/Server.Net4/UA Sample Server.csproj
+++ b/Samples/Server.Net4/UA Sample Server.csproj
@@ -39,7 +39,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Samples/ServerControls.Net4/ServerDiagnosticsCtrl.cs b/Samples/ServerControls.Net4/ServerDiagnosticsCtrl.cs
index f395c45e6..76db4f630 100644
--- a/Samples/ServerControls.Net4/ServerDiagnosticsCtrl.cs
+++ b/Samples/ServerControls.Net4/ServerDiagnosticsCtrl.cs
@@ -102,24 +102,27 @@ private void UpdateSessions()
{
ISession session = sessions[ii];
- lock (session.DiagnosticsLock)
- {
- ListViewItem item = new ListViewItem(session.SessionDiagnostics.SessionName);
-
- if (session.Identity != null)
- {
- item.SubItems.Add(session.Identity.DisplayName);
- }
- else
- {
- item.SubItems.Add(String.Empty);
- }
+ // The session owns its diagnostics lock and no longer exposes it.
+ // ReadDiagnostics applies the projection while holding that lock;
+ // the diagnostics object must not escape the callback.
+ string sessionName = session.ReadDiagnostics(d => d.SessionName);
+ DateTimeUtc lastContactTime = session.ReadDiagnostics(d => d.ClientLastContactTime);
- item.SubItems.Add(String.Format("{0}", session.Id));
- item.SubItems.Add(String.Format("{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime()));
+ ListViewItem item = new ListViewItem(sessionName);
- SessionsLV.Items.Add(item);
+ if (session.Identity != null)
+ {
+ item.SubItems.Add(session.Identity.DisplayName);
+ }
+ else
+ {
+ item.SubItems.Add(String.Empty);
}
+
+ item.SubItems.Add(String.Format("{0}", session.Id));
+ item.SubItems.Add(String.Format("{0:HH:mm:ss}", lastContactTime.ToLocalTime()));
+
+ SessionsLV.Items.Add(item);
}
// adjust
@@ -147,10 +150,10 @@ private void UpdateSubscriptions()
item.SubItems.Add(String.Format("{0}", (int)subscription.PublishingInterval));
item.SubItems.Add(String.Format("{0}", subscription.MonitoredItemCount));
- lock (subscription.DiagnosticsLock)
- {
- item.SubItems.Add(String.Format("{0}", subscription.Diagnostics.NextSequenceNumber));
- }
+ // Same as above: the subscription reads its own diagnostics under
+ // the lock it owns, replacing the former DiagnosticsLock property.
+ item.SubItems.Add(String.Format("{0}",
+ subscription.ReadDiagnostics(d => d.NextSequenceNumber)));
SubscriptionsLV.Items.Add(item);
}
diff --git a/Samples/ServerControls.Net4/UA Server Controls.csproj b/Samples/ServerControls.Net4/UA Server Controls.csproj
index 3fcb74839..ceda15505 100644
--- a/Samples/ServerControls.Net4/UA Server Controls.csproj
+++ b/Samples/ServerControls.Net4/UA Server Controls.csproj
@@ -38,13 +38,13 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Aggregation/Client/Aggregation Client.csproj b/Workshop/Aggregation/Client/Aggregation Client.csproj
index f75979c8e..a2cfd9946 100644
--- a/Workshop/Aggregation/Client/Aggregation Client.csproj
+++ b/Workshop/Aggregation/Client/Aggregation Client.csproj
@@ -31,7 +31,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj b/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
index 6695e1d55..f9a2a8a09 100644
--- a/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
+++ b/Workshop/Aggregation/ConsoleAggregationServer/ConsoleAggregationServer.csproj
@@ -46,18 +46,18 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/Workshop/Aggregation/ConsoleAggregationServer/Program.cs b/Workshop/Aggregation/ConsoleAggregationServer/Program.cs
index 03295a387..70947a8ff 100644
--- a/Workshop/Aggregation/ConsoleAggregationServer/Program.cs
+++ b/Workshop/Aggregation/ConsoleAggregationServer/Program.cs
@@ -238,23 +238,22 @@ private void EventStatus(ISession session, SessionEventReason reason)
private void PrintSessionStatus(ISession session, string reason, bool lastContact = false)
{
- lock (session.DiagnosticsLock)
+ // The session owns its diagnostics lock and no longer exposes it;
+ // ReadDiagnostics applies each projection while holding that lock.
+ string item = String.Format("{0,9}:{1,20}:", reason, session.ReadDiagnostics(d => d.SessionName));
+ if (lastContact)
{
- string item = String.Format("{0,9}:{1,20}:", reason, session.SessionDiagnostics.SessionName);
- if (lastContact)
- {
- item += String.Format(":{0:HH:mm:ss}", session.SessionDiagnostics.ClientLastContactTime.ToLocalTime());
- }
- else
+ item += String.Format(":{0:HH:mm:ss}", session.ReadDiagnostics(d => d.ClientLastContactTime).ToLocalTime());
+ }
+ else
+ {
+ if (session.Identity != null)
{
- if (session.Identity != null)
- {
- item += String.Format(":{0,20}", session.Identity.DisplayName);
- }
- item += String.Format(":{0}", session.Id);
+ item += String.Format(":{0,20}", session.Identity.DisplayName);
}
- Console.WriteLine(item);
+ item += String.Format(":{0}", session.Id);
}
+ Console.WriteLine(item);
}
private async Task StatusThreadAsync()
diff --git a/Workshop/Aggregation/Server/Aggregation Server.csproj b/Workshop/Aggregation/Server/Aggregation Server.csproj
index a4d2b9ebd..bc33434b2 100644
--- a/Workshop/Aggregation/Server/Aggregation Server.csproj
+++ b/Workshop/Aggregation/Server/Aggregation Server.csproj
@@ -41,17 +41,17 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
-
+
\ No newline at end of file
diff --git a/Workshop/Aggregation/Server/AggregationNodeManager.cs b/Workshop/Aggregation/Server/AggregationNodeManager.cs
index a808c7c45..f115194ff 100644
--- a/Workshop/Aggregation/Server/AggregationNodeManager.cs
+++ b/Workshop/Aggregation/Server/AggregationNodeManager.cs
@@ -1237,7 +1237,7 @@ Opc.Ua.Client.ISession GetClientSession(ServerSystemContext context)
if (context != null)
{
sessionId = context.SessionId ?? NodeId.Null;
- sessionName = context.OperationContext.Session.SessionDiagnostics.SessionName;
+ sessionName = context.OperationContext.Session.ReadDiagnostics(d => d.SessionName);
userIdentity = context.UserIdentity;
preferredLocales = context.PreferredLocales;
}
@@ -1492,39 +1492,38 @@ private async void DoMetadataUpdateAsync(object state)
"http://opcfoundation.org/UA/Diagnostics"
};
- lock (Server.DiagnosticsLock)
+ // The server owns its diagnostics lock and no longer exposes it; this
+ // section does not touch the diagnostics summary it guarded.
+ ushort[] namespaceIndexes = null;
+ lock (Lock)
{
- ushort[] namespaceIndexes = null;
- lock (Lock)
- {
- var mapper = new NamespaceMapper();
- mapper.TypeSystemNamespaceUris = TypeSystemNamespaceUris;
- mapper.Initialize(Server.NamespaceUris, client.NamespaceUris, m_endpoint.Description.Server.ApplicationUri);
-
- // set the namespace indexes.
- namespaceIndexes = new ushort[mapper.LocalNamespaceIndexes.Length + ((m_ownsTypeModel) ? 1 : 0)];
+ var mapper = new NamespaceMapper();
+ mapper.TypeSystemNamespaceUris = TypeSystemNamespaceUris;
+ mapper.Initialize(Server.NamespaceUris, client.NamespaceUris, m_endpoint.Description.Server.ApplicationUri);
- int index = 0;
- namespaceIndexes[index++] = (ushort)Server.NamespaceUris.GetIndex(Namespaces.Aggregation);
+ // set the namespace indexes.
+ namespaceIndexes = new ushort[mapper.LocalNamespaceIndexes.Length + ((m_ownsTypeModel) ? 1 : 0)];
- if (m_ownsTypeModel)
- {
- namespaceIndexes[index++] = (ushort)Server.NamespaceUris.GetIndex(AggregationModel.Namespaces.Aggregation);
- }
+ int index = 0;
+ namespaceIndexes[index++] = (ushort)Server.NamespaceUris.GetIndex(Namespaces.Aggregation);
- for (int ii = 1; ii < mapper.LocalNamespaceIndexes.Length; ii++)
- {
- namespaceIndexes[index++] = (ushort)mapper.LocalNamespaceIndexes[ii];
- }
- m_mapper = mapper;
- SetNamespaceIndexes(namespaceIndexes);
+ if (m_ownsTypeModel)
+ {
+ namespaceIndexes[index++] = (ushort)Server.NamespaceUris.GetIndex(AggregationModel.Namespaces.Aggregation);
}
- // re-register node manager.
- for (int ii = 0; ii < namespaceIndexes.Length; ii++)
+ for (int ii = 1; ii < mapper.LocalNamespaceIndexes.Length; ii++)
{
- Server.NodeManager.RegisterNamespaceManager(Server.NamespaceUris.GetString(namespaceIndexes[ii]), this);
+ namespaceIndexes[index++] = (ushort)mapper.LocalNamespaceIndexes[ii];
}
+ m_mapper = mapper;
+ SetNamespaceIndexes(namespaceIndexes);
+ }
+
+ // re-register node manager.
+ for (int ii = 0; ii < namespaceIndexes.Length; ii++)
+ {
+ Server.NodeManager.RegisterNamespaceManager(Server.NamespaceUris.GetString(namespaceIndexes[ii]), this);
}
AggregatedTypeCache cache = new AggregatedTypeCache();
diff --git a/Workshop/Aggregation/Server/Browser.cs b/Workshop/Aggregation/Server/Browser.cs
index 119ba7edb..811a16030 100644
--- a/Workshop/Aggregation/Server/Browser.cs
+++ b/Workshop/Aggregation/Server/Browser.cs
@@ -83,10 +83,9 @@ public Browser(
/// The next reference that meets the browse criteria.
public override IReference Next()
{
- lock (DataLock)
- {
- return NextAsync().Result;
- }
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ return NextAsync().Result;
}
public async Task NextAsync(CancellationToken ct = default)
diff --git a/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj b/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
index 8dbf8fb46..55b99f2eb 100644
--- a/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
+++ b/Workshop/AlarmCondition/Client/AlarmCondition Client.csproj
@@ -33,7 +33,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj b/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
index 5361bee58..b4576ed08 100644
--- a/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
+++ b/Workshop/AlarmCondition/Server/AlarmCondition Server.csproj
@@ -33,12 +33,12 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Boiler/Client/Boiler Client.csproj b/Workshop/Boiler/Client/Boiler Client.csproj
index c762564ab..da1bb3fbf 100644
--- a/Workshop/Boiler/Client/Boiler Client.csproj
+++ b/Workshop/Boiler/Client/Boiler Client.csproj
@@ -32,7 +32,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Boiler/Server/Boiler Server.csproj b/Workshop/Boiler/Server/Boiler Server.csproj
index 1cf1158a2..52f3323a3 100644
--- a/Workshop/Boiler/Server/Boiler Server.csproj
+++ b/Workshop/Boiler/Server/Boiler Server.csproj
@@ -37,7 +37,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Boiler/Server/Quickstarts.Boiler.Classes.cs b/Workshop/Boiler/Server/Quickstarts.Boiler.Classes.cs
index b1085982c..bf627cc77 100644
--- a/Workshop/Boiler/Server/Quickstarts.Boiler.Classes.cs
+++ b/Workshop/Boiler/Server/Quickstarts.Boiler.Classes.cs
@@ -194,7 +194,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -274,7 +275,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -396,7 +397,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -434,7 +436,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -554,7 +556,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -592,7 +595,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -786,7 +789,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -887,7 +891,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -1415,7 +1419,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -1474,7 +1479,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -1596,7 +1601,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -1634,7 +1640,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -1755,7 +1761,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -1793,7 +1800,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -2060,7 +2067,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -2203,7 +2211,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/Common/Quickstart Library.csproj b/Workshop/Common/Quickstart Library.csproj
index 4a0124c72..09d0f408c 100644
--- a/Workshop/Common/Quickstart Library.csproj
+++ b/Workshop/Common/Quickstart Library.csproj
@@ -46,7 +46,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/Common/QuickstartNodeManager.cs b/Workshop/Common/QuickstartNodeManager.cs
index b29328c1e..f61b8553b 100644
--- a/Workshop/Common/QuickstartNodeManager.cs
+++ b/Workshop/Common/QuickstartNodeManager.cs
@@ -3881,6 +3881,32 @@ public virtual void TransferMonitoredItems(
IList monitoredItems,
IList processedItems,
IList errors)
+ {
+ TransferMonitoredItems(
+ context,
+ sendInitialValues,
+ monitoredItems,
+ processedItems,
+ errors,
+ new MonitoredItemTransferOptions());
+ }
+
+ ///
+ /// Transfers a set of monitored items.
+ ///
+ /// The context.
+ /// Whether the subscription should send initial values after transfer.
+ /// The set of monitoring items to update.
+ /// The list of bool with items that were already processed.
+ /// Any errors.
+ /// Controls how the transfer is executed.
+ public virtual void TransferMonitoredItems(
+ OperationContext context,
+ bool sendInitialValues,
+ IList monitoredItems,
+ IList processedItems,
+ IList errors,
+ MonitoredItemTransferOptions transferOptions)
{
ServerSystemContext systemContext = m_systemContext.Copy(context);
List transferredItems = new List();
@@ -3905,7 +3931,7 @@ public virtual void TransferMonitoredItems(
// owned by this node manager.
processedItems[ii] = true;
transferredItems.Add(monitoredItems[ii]);
- if (sendInitialValues)
+ if (sendInitialValues && !transferOptions.DeferInitialValues)
{
monitoredItems[ii].SetupResendDataTrigger();
}
diff --git a/Workshop/DataAccess/Client/DataAccess Client.csproj b/Workshop/DataAccess/Client/DataAccess Client.csproj
index ba0bcbb21..89fc64a42 100644
--- a/Workshop/DataAccess/Client/DataAccess Client.csproj
+++ b/Workshop/DataAccess/Client/DataAccess Client.csproj
@@ -33,7 +33,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/DataAccess/Server/DataAccess Server.csproj b/Workshop/DataAccess/Server/DataAccess Server.csproj
index 9d3e038a6..b53bab0e3 100644
--- a/Workshop/DataAccess/Server/DataAccess Server.csproj
+++ b/Workshop/DataAccess/Server/DataAccess Server.csproj
@@ -34,7 +34,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/DataAccess/Server/Model/SegmentBrowser.cs b/Workshop/DataAccess/Server/Model/SegmentBrowser.cs
index 6b1236183..b163402cc 100644
--- a/Workshop/DataAccess/Server/Model/SegmentBrowser.cs
+++ b/Workshop/DataAccess/Server/Model/SegmentBrowser.cs
@@ -91,70 +91,69 @@ public override IReference Next()
{
UnderlyingSystem system = (UnderlyingSystem)this.SystemContext.SystemHandle;
- lock (DataLock)
- {
- IReference reference = null;
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ IReference reference = null;
- // enumerate pre-defined references.
- // always call first to ensure any pushed-back references are returned first.
- reference = base.Next();
+ // enumerate pre-defined references.
+ // always call first to ensure any pushed-back references are returned first.
+ reference = base.Next();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
+ }
- if (m_stage == Stage.Begin)
- {
- m_segments = system.FindSegments(m_source.SegmentPath);
- m_stage = Stage.Segments;
- m_position = 0;
- }
+ if (m_stage == Stage.Begin)
+ {
+ m_segments = system.FindSegments(m_source.SegmentPath);
+ m_stage = Stage.Segments;
+ m_position = 0;
+ }
- // don't start browsing huge number of references when only internal references are requested.
- if (InternalOnly)
- {
- return null;
- }
+ // don't start browsing huge number of references when only internal references are requested.
+ if (InternalOnly)
+ {
+ return null;
+ }
- // enumerate segments.
- if (m_stage == Stage.Segments)
+ // enumerate segments.
+ if (m_stage == Stage.Segments)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
+ reference = NextChild();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
}
-
- m_blocks = system.FindBlocks(m_source.SegmentPath);
- m_stage = Stage.Blocks;
- m_position = 0;
}
- // enumerate blocks.
- if (m_stage == Stage.Blocks)
- {
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
+ m_blocks = system.FindBlocks(m_source.SegmentPath);
+ m_stage = Stage.Blocks;
+ m_position = 0;
+ }
- if (reference != null)
- {
- return reference;
- }
+ // enumerate blocks.
+ if (m_stage == Stage.Blocks)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
+ {
+ reference = NextChild();
- m_stage = Stage.Done;
- m_position = 0;
+ if (reference != null)
+ {
+ return reference;
}
- }
- // all done.
- return null;
+ m_stage = Stage.Done;
+ m_position = 0;
+ }
}
+
+ // all done.
+ return null;
}
#endregion
diff --git a/Workshop/DataTypes/Client/DataTypes Client.csproj b/Workshop/DataTypes/Client/DataTypes Client.csproj
index a46f953ff..859a012ef 100644
--- a/Workshop/DataTypes/Client/DataTypes Client.csproj
+++ b/Workshop/DataTypes/Client/DataTypes Client.csproj
@@ -25,7 +25,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/DataTypes/Common/DataTypes Library.csproj b/Workshop/DataTypes/Common/DataTypes Library.csproj
index 29171cdac..b4b66623e 100644
--- a/Workshop/DataTypes/Common/DataTypes Library.csproj
+++ b/Workshop/DataTypes/Common/DataTypes Library.csproj
@@ -44,7 +44,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/DataTypes/Common/Types/Quickstarts.DataTypes.Types.Classes.cs b/Workshop/DataTypes/Common/Types/Quickstarts.DataTypes.Types.Classes.cs
index d60c213b7..4a2aac05c 100644
--- a/Workshop/DataTypes/Common/Types/Quickstarts.DataTypes.Types.Classes.cs
+++ b/Workshop/DataTypes/Common/Types/Quickstarts.DataTypes.Types.Classes.cs
@@ -167,7 +167,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -226,7 +227,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/DataTypes/Server/DataTypes Server.csproj b/Workshop/DataTypes/Server/DataTypes Server.csproj
index 311f74836..0aaa95b9f 100644
--- a/Workshop/DataTypes/Server/DataTypes Server.csproj
+++ b/Workshop/DataTypes/Server/DataTypes Server.csproj
@@ -38,7 +38,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/Empty/Client/Empty Client.csproj b/Workshop/Empty/Client/Empty Client.csproj
index 6e7e17d05..3735d9cc4 100644
--- a/Workshop/Empty/Client/Empty Client.csproj
+++ b/Workshop/Empty/Client/Empty Client.csproj
@@ -31,7 +31,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/Empty/Server/Empty Server.csproj b/Workshop/Empty/Server/Empty Server.csproj
index 4fda93c1f..fe1395298 100644
--- a/Workshop/Empty/Server/Empty Server.csproj
+++ b/Workshop/Empty/Server/Empty Server.csproj
@@ -31,7 +31,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj b/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
index 73ecac426..9c354ba1d 100644
--- a/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
+++ b/Workshop/HistoricalAccess/Client/HistoricalAccess Client.csproj
@@ -30,7 +30,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj b/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
index 2b193ecc4..6911bf496 100644
--- a/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
+++ b/Workshop/HistoricalAccess/Server/HistoricalAccess Server.csproj
@@ -59,7 +59,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/HistoricalAccess/Server/HistoricalAccessNodeManager.cs b/Workshop/HistoricalAccess/Server/HistoricalAccessNodeManager.cs
index 5457989aa..f9652fbae 100644
--- a/Workshop/HistoricalAccess/Server/HistoricalAccessNodeManager.cs
+++ b/Workshop/HistoricalAccess/Server/HistoricalAccessNodeManager.cs
@@ -120,17 +120,16 @@ public override NodeId New(ISystemContext context, NodeState node)
///
public override void CreateAddressSpace(IDictionary> externalReferences)
{
- lock (Server.DiagnosticsLock)
- {
- HistoryServerCapabilitiesState capabilities = Server.DiagnosticsNodeManager.GetDefaultHistoryCapabilitiesAsync(System.Threading.CancellationToken.None).GetAwaiter().GetResult();
- capabilities.AccessHistoryDataCapability.Value = true;
- capabilities.InsertDataCapability.Value = true;
- capabilities.ReplaceDataCapability.Value = true;
- capabilities.UpdateDataCapability.Value = true;
- capabilities.DeleteRawCapability.Value = true;
- capabilities.DeleteAtTimeCapability.Value = true;
- capabilities.InsertAnnotationCapability.Value = true;
- }
+ // The server owns its diagnostics lock and no longer exposes it; this
+ // section does not touch the diagnostics summary it guarded.
+ HistoryServerCapabilitiesState capabilities = Server.DiagnosticsNodeManager.GetDefaultHistoryCapabilitiesAsync(System.Threading.CancellationToken.None).GetAwaiter().GetResult();
+ capabilities.AccessHistoryDataCapability.Value = true;
+ capabilities.InsertDataCapability.Value = true;
+ capabilities.ReplaceDataCapability.Value = true;
+ capabilities.UpdateDataCapability.Value = true;
+ capabilities.DeleteRawCapability.Value = true;
+ capabilities.DeleteAtTimeCapability.Value = true;
+ capabilities.InsertAnnotationCapability.Value = true;
lock (Lock)
{
@@ -1643,13 +1642,18 @@ private DataValue RowToDataValue(
///
/// Stores a read history request.
///
- private sealed class HistoryReadRequest
+ private sealed class HistoryReadRequest : IHistoryContinuationPoint
{
+ public Guid Id { get; set; }
public ByteString ContinuationPoint;
public LinkedList Values;
public LinkedList ModificationInfos;
public uint NumValuesPerNode;
public AggregateFilter Filter;
+
+ public void Dispose()
+ {
+ }
}
///
@@ -1695,7 +1699,7 @@ private HistoryReadRequest LoadContinuationPoint(
return null;
}
- HistoryReadRequest request = session.RestoreHistoryContinuationPoint(continuationPoint) as HistoryReadRequest;
+ HistoryReadRequest request = session.ContinuationPoints.RestoreHistory(continuationPoint) as HistoryReadRequest;
if (request == null)
{
@@ -1719,9 +1723,9 @@ private ByteString SaveContinuationPoint(
return default;
}
- Guid id = Guid.NewGuid();
- session.SaveHistoryContinuationPoint(id, request);
- request.ContinuationPoint = id.ToByteArray().ToByteString();
+ request.Id = Guid.NewGuid();
+ session.ContinuationPoints.SaveHistory(request);
+ request.ContinuationPoint = request.Id.ToByteArray().ToByteString();
return request.ContinuationPoint;
}
#endregion
diff --git a/Workshop/HistoricalAccess/Server/Model/SegmentBrowser.cs b/Workshop/HistoricalAccess/Server/Model/SegmentBrowser.cs
index 213851119..06a620512 100644
--- a/Workshop/HistoricalAccess/Server/Model/SegmentBrowser.cs
+++ b/Workshop/HistoricalAccess/Server/Model/SegmentBrowser.cs
@@ -91,70 +91,69 @@ public override IReference Next()
{
UnderlyingSystem system = (UnderlyingSystem)this.SystemContext.SystemHandle;
- lock (DataLock)
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ IReference reference = null;
+
+ // enumerate pre-defined references.
+ // always call first to ensure any pushed-back references are returned first.
+ reference = base.Next();
+
+ if (reference != null)
{
- IReference reference = null;
+ return reference;
+ }
- // enumerate pre-defined references.
- // always call first to ensure any pushed-back references are returned first.
- reference = base.Next();
+ if (m_stage == Stage.Begin)
+ {
+ m_segments = system.FindSegments(m_source.SegmentPath);
+ m_stage = Stage.Segments;
+ m_position = 0;
+ }
- if (reference != null)
+ // don't start browsing huge number of references when only internal references are requested.
+ if (InternalOnly)
+ {
+ return null;
+ }
+
+ // enumerate segments.
+ if (m_stage == Stage.Segments)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- return reference;
- }
+ reference = NextChild();
- if (m_stage == Stage.Begin)
- {
- m_segments = system.FindSegments(m_source.SegmentPath);
- m_stage = Stage.Segments;
- m_position = 0;
+ if (reference != null)
+ {
+ return reference;
+ }
}
- // don't start browsing huge number of references when only internal references are requested.
- if (InternalOnly)
- {
- return null;
- }
-
- // enumerate segments.
- if (m_stage == Stage.Segments)
+ m_blocks = system.FindBlocks(m_source.SegmentPath);
+ m_stage = Stage.Blocks;
+ m_position = 0;
+ }
+
+ // enumerate blocks.
+ if (m_stage == Stage.Blocks)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
+ reference = NextChild();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
}
- m_blocks = system.FindBlocks(m_source.SegmentPath);
- m_stage = Stage.Blocks;
+ m_stage = Stage.Done;
m_position = 0;
}
-
- // enumerate blocks.
- if (m_stage == Stage.Blocks)
- {
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
-
- if (reference != null)
- {
- return reference;
- }
-
- m_stage = Stage.Done;
- m_position = 0;
- }
- }
-
- // all done.
- return null;
}
+
+ // all done.
+ return null;
}
#endregion
diff --git a/Workshop/HistoricalAccess/Server/UnderlyingSystem/ArchiveFolderBrowser.cs b/Workshop/HistoricalAccess/Server/UnderlyingSystem/ArchiveFolderBrowser.cs
index 3dd81ab1e..27cd6b96d 100644
--- a/Workshop/HistoricalAccess/Server/UnderlyingSystem/ArchiveFolderBrowser.cs
+++ b/Workshop/HistoricalAccess/Server/UnderlyingSystem/ArchiveFolderBrowser.cs
@@ -91,87 +91,86 @@ public override IReference Next()
{
UnderlyingSystem system = (UnderlyingSystem)this.SystemContext.SystemHandle;
- lock (DataLock)
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ IReference reference = null;
+
+ // enumerate pre-defined references.
+ // always call first to ensure any pushed-back references are returned first.
+ reference = base.Next();
+
+ if (reference != null)
{
- IReference reference = null;
+ return reference;
+ }
- // enumerate pre-defined references.
- // always call first to ensure any pushed-back references are returned first.
- reference = base.Next();
+ if (m_stage == Stage.Begin)
+ {
+ m_folders = m_source.ArchiveFolder.GetChildFolders();
+ m_stage = Stage.Folders;
+ m_position = 0;
+ }
- if (reference != null)
- {
- return reference;
- }
+ // don't start browsing huge number of references when only internal references are requested.
+ if (InternalOnly)
+ {
+ return null;
+ }
- if (m_stage == Stage.Begin)
+ // enumerate folders.
+ if (m_stage == Stage.Folders)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- m_folders = m_source.ArchiveFolder.GetChildFolders();
- m_stage = Stage.Folders;
- m_position = 0;
- }
+ reference = NextChild();
- // don't start browsing huge number of references when only internal references are requested.
- if (InternalOnly)
- {
- return null;
+ if (reference != null)
+ {
+ return reference;
+ }
}
- // enumerate folders.
- if (m_stage == Stage.Folders)
+ m_items = m_source.ArchiveFolder.GetItems();
+ m_stage = Stage.Items;
+ m_position = 0;
+ }
+
+ // enumerate items.
+ if (m_stage == Stage.Items)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
+ reference = NextChild();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
}
- m_items = m_source.ArchiveFolder.GetItems();
- m_stage = Stage.Items;
+ m_stage = Stage.Parents;
m_position = 0;
}
+ }
- // enumerate items.
- if (m_stage == Stage.Items)
+ // enumerate parents.
+ if (m_stage == Stage.Parents)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, true))
{
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
-
- if (reference != null)
- {
- return reference;
- }
-
- m_stage = Stage.Parents;
- m_position = 0;
- }
- }
+ reference = NextChild();
- // enumerate parents.
- if (m_stage == Stage.Parents)
- {
- if (IsRequired(ReferenceTypeIds.Organizes, true))
+ if (reference != null)
{
- reference = NextChild();
-
- if (reference != null)
- {
- return reference;
- }
-
- m_stage = Stage.Done;
- m_position = 0;
+ return reference;
}
- }
- // all done.
- return null;
+ m_stage = Stage.Done;
+ m_position = 0;
+ }
}
+
+ // all done.
+ return null;
}
#endregion
diff --git a/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj b/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
index 89e1f7de7..9b062ff59 100644
--- a/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
+++ b/Workshop/HistoricalAccess/Tester/Aggregate Tester.csproj
@@ -34,10 +34,10 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj b/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
index cc2de05a0..6ef393c89 100644
--- a/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
+++ b/Workshop/HistoricalEvents/Client/HistoricalEvents Client.csproj
@@ -34,7 +34,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/HistoricalEvents/Client/Quickstarts.HistoricalEvents.Classes.cs b/Workshop/HistoricalEvents/Client/Quickstarts.HistoricalEvents.Classes.cs
index 23dca3e0c..9e6444e08 100644
--- a/Workshop/HistoricalEvents/Client/Quickstarts.HistoricalEvents.Classes.cs
+++ b/Workshop/HistoricalEvents/Client/Quickstarts.HistoricalEvents.Classes.cs
@@ -231,7 +231,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -332,7 +333,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -500,7 +501,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -559,7 +561,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -723,7 +725,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -782,7 +785,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj b/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
index 774adefef..10146ed65 100644
--- a/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
+++ b/Workshop/HistoricalEvents/Server/HistoricalEvents Server.csproj
@@ -36,7 +36,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/HistoricalEvents/Server/HistoricalEventsNodeManager.cs b/Workshop/HistoricalEvents/Server/HistoricalEventsNodeManager.cs
index 8ee770b1e..e8619c3f8 100644
--- a/Workshop/HistoricalEvents/Server/HistoricalEventsNodeManager.cs
+++ b/Workshop/HistoricalEvents/Server/HistoricalEventsNodeManager.cs
@@ -595,14 +595,19 @@ private HistoryReadRequest CreateHistoryReadRequest(
///
/// Stores a read history request.
///
- private sealed class HistoryReadRequest
+ private sealed class HistoryReadRequest : IHistoryContinuationPoint
{
+ public Guid Id { get; set; }
public ByteString ContinuationPoint;
public LinkedList Events;
public bool TimeFlowsBackward;
public uint NumValuesPerNode;
public EventFilter Filter;
public FilterContext FilterContext;
+
+ public void Dispose()
+ {
+ }
}
///
@@ -648,7 +653,7 @@ private HistoryReadRequest LoadContinuationPoint(
return null;
}
- HistoryReadRequest request = session.RestoreHistoryContinuationPoint(continuationPoint) as HistoryReadRequest;
+ HistoryReadRequest request = session.ContinuationPoints.RestoreHistory(continuationPoint) as HistoryReadRequest;
if (request == null)
{
@@ -672,9 +677,9 @@ private ByteString SaveContinuationPoint(
return default;
}
- Guid id = Guid.NewGuid();
- session.SaveHistoryContinuationPoint(id, request);
- request.ContinuationPoint = id.ToByteArray().ToByteString();
+ request.Id = Guid.NewGuid();
+ session.ContinuationPoints.SaveHistory(request);
+ request.ContinuationPoint = request.Id.ToByteArray().ToByteString();
return request.ContinuationPoint;
}
#endregion
diff --git a/Workshop/HistoricalEvents/Server/Model/Quickstarts.HistoricalEvents.Classes.cs b/Workshop/HistoricalEvents/Server/Model/Quickstarts.HistoricalEvents.Classes.cs
index 23dca3e0c..9e6444e08 100644
--- a/Workshop/HistoricalEvents/Server/Model/Quickstarts.HistoricalEvents.Classes.cs
+++ b/Workshop/HistoricalEvents/Server/Model/Quickstarts.HistoricalEvents.Classes.cs
@@ -231,7 +231,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -332,7 +333,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -500,7 +501,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -559,7 +561,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -723,7 +725,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -782,7 +785,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/Methods/Client/Methods Client.csproj b/Workshop/Methods/Client/Methods Client.csproj
index 78044a2b9..a1386faf5 100644
--- a/Workshop/Methods/Client/Methods Client.csproj
+++ b/Workshop/Methods/Client/Methods Client.csproj
@@ -30,7 +30,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/Methods/Server/Methods Server.csproj b/Workshop/Methods/Server/Methods Server.csproj
index b837f1516..34edcf3ef 100644
--- a/Workshop/Methods/Server/Methods Server.csproj
+++ b/Workshop/Methods/Server/Methods Server.csproj
@@ -31,7 +31,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/PerfTest/Client/PerfTest Client.csproj b/Workshop/PerfTest/Client/PerfTest Client.csproj
index 647b10c31..5d97c7b77 100644
--- a/Workshop/PerfTest/Client/PerfTest Client.csproj
+++ b/Workshop/PerfTest/Client/PerfTest Client.csproj
@@ -30,7 +30,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/PerfTest/Server/MemoryRegisterState.cs b/Workshop/PerfTest/Server/MemoryRegisterState.cs
index 9f13a6b40..8b7ff309b 100644
--- a/Workshop/PerfTest/Server/MemoryRegisterState.cs
+++ b/Workshop/PerfTest/Server/MemoryRegisterState.cs
@@ -168,48 +168,47 @@ public override IReference Next()
{
UnderlyingSystem system = (UnderlyingSystem)this.SystemContext.SystemHandle;
- lock (DataLock)
- {
- IReference reference = null;
+ // NodeBrowser instances are single-consumer and perform no
+ // synchronization of their own; the former DataLock is gone.
+ IReference reference = null;
- // enumerate pre-defined references.
- // always call first to ensure any pushed-back references are returned first.
- reference = base.Next();
+ // enumerate pre-defined references.
+ // always call first to ensure any pushed-back references are returned first.
+ reference = base.Next();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
+ }
- if (m_stage == Stage.Begin)
- {
- m_stage = Stage.Tags;
- m_position = 0;
- }
+ if (m_stage == Stage.Begin)
+ {
+ m_stage = Stage.Tags;
+ m_position = 0;
+ }
- // don't start browsing huge number of references when only internal references are requested.
- if (InternalOnly)
- {
- return null;
- }
+ // don't start browsing huge number of references when only internal references are requested.
+ if (InternalOnly)
+ {
+ return null;
+ }
- // enumerate tags.
- if (m_stage == Stage.Tags)
+ // enumerate tags.
+ if (m_stage == Stage.Tags)
+ {
+ if (IsRequired(ReferenceTypeIds.Organizes, false))
{
- if (IsRequired(ReferenceTypeIds.Organizes, false))
- {
- reference = NextChild();
+ reference = NextChild();
- if (reference != null)
- {
- return reference;
- }
+ if (reference != null)
+ {
+ return reference;
}
}
-
- // all done.
- return null;
}
+
+ // all done.
+ return null;
}
#endregion
diff --git a/Workshop/PerfTest/Server/PerfTest Server.csproj b/Workshop/PerfTest/Server/PerfTest Server.csproj
index 299f8ec7b..63570114b 100644
--- a/Workshop/PerfTest/Server/PerfTest Server.csproj
+++ b/Workshop/PerfTest/Server/PerfTest Server.csproj
@@ -31,7 +31,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/SimpleEvents/Client/Quickstarts.SimpleEvents.Classes.cs b/Workshop/SimpleEvents/Client/Quickstarts.SimpleEvents.Classes.cs
index 74f123c65..4d133b497 100644
--- a/Workshop/SimpleEvents/Client/Quickstarts.SimpleEvents.Classes.cs
+++ b/Workshop/SimpleEvents/Client/Quickstarts.SimpleEvents.Classes.cs
@@ -176,7 +176,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -235,7 +236,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -364,7 +365,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -402,7 +404,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -543,7 +545,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -581,7 +584,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj b/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
index c8ab64b18..7e8174fcf 100644
--- a/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
+++ b/Workshop/SimpleEvents/Client/SimpleEvents Client.csproj
@@ -27,7 +27,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
diff --git a/Workshop/SimpleEvents/Server/Quickstarts.SimpleEvents.Classes.cs b/Workshop/SimpleEvents/Server/Quickstarts.SimpleEvents.Classes.cs
index 74f123c65..4d133b497 100644
--- a/Workshop/SimpleEvents/Server/Quickstarts.SimpleEvents.Classes.cs
+++ b/Workshop/SimpleEvents/Server/Quickstarts.SimpleEvents.Classes.cs
@@ -176,7 +176,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -235,7 +236,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -364,7 +365,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -402,7 +404,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -543,7 +545,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -581,7 +584,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj b/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
index 32fe78024..33d5b7a85 100644
--- a/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
+++ b/Workshop/SimpleEvents/Server/SimpleEvents Server.csproj
@@ -35,7 +35,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj b/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
index 132be9446..6012d506c 100644
--- a/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
+++ b/Workshop/UserAuthentication/Client/UserAuthentication Client.csproj
@@ -30,7 +30,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj b/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
index 5ac88b6f0..f3bbfe12a 100644
--- a/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
+++ b/Workshop/UserAuthentication/Server/UserAuthentication Server.csproj
@@ -31,8 +31,8 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
-
+
\ No newline at end of file
diff --git a/Workshop/Views/Client/Views Client.csproj b/Workshop/Views/Client/Views Client.csproj
index 7269aa5b5..b085d804d 100644
--- a/Workshop/Views/Client/Views Client.csproj
+++ b/Workshop/Views/Client/Views Client.csproj
@@ -30,7 +30,7 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
\ No newline at end of file
diff --git a/Workshop/Views/Server/Model/Quickstarts.Views.Classes.cs b/Workshop/Views/Server/Model/Quickstarts.Views.Classes.cs
index 13ae710b1..959a7a052 100644
--- a/Workshop/Views/Server/Model/Quickstarts.Views.Classes.cs
+++ b/Workshop/Views/Server/Model/Quickstarts.Views.Classes.cs
@@ -225,7 +225,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -326,7 +327,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
@@ -679,7 +680,8 @@ protected override BaseInstanceState FindChild(
ISystemContext context,
QualifiedName browseName,
bool createOrReplace,
- BaseInstanceState replacement)
+ BaseInstanceState replacement,
+ bool assignInstanceNodeIds = true)
{
if ((browseName).IsNull)
{
@@ -759,7 +761,7 @@ protected override BaseInstanceState FindChild(
return instance;
}
- return base.FindChild(context, browseName, createOrReplace, replacement);
+ return base.FindChild(context, browseName, createOrReplace, replacement, assignInstanceNodeIds);
}
#endregion
diff --git a/Workshop/Views/Server/Views Server.csproj b/Workshop/Views/Server/Views Server.csproj
index f6a096d35..d2233ae59 100644
--- a/Workshop/Views/Server/Views Server.csproj
+++ b/Workshop/Views/Server/Views Server.csproj
@@ -41,9 +41,9 @@
10.0.10
- 2.0.158.59919-preview
+ 2.0.0-preview.2
-
+