/// <summary> /// Specifies one or more nodes to monitor for data changes or events. /// </summary> public CreateMonitoredItemsResponseMessage CreateMonitoredItems(CreateMonitoredItemsMessage request) { try { lock (m_lock) { // verify session. VerifySession(request.RequestHeader, false); // look up subscription. Subscription subscription = null; if (!m_subscriptions.TryGetValue(request.SubscriptionId, out subscription)) { throw new StatusCodeException(StatusCodes.BadSubscriptionIdInvalid, "Could not find subscription"); } // process each item. ListOfMonitoredItemCreateResult results = new ListOfMonitoredItemCreateResult(); ListOfDiagnosticInfo diagnosticInfos = new ListOfDiagnosticInfo(); for (int ii = 0; ii < request.ItemsToCreate.Count; ii++) { MonitoredItemCreateResult result = new MonitoredItemCreateResult(); DiagnosticInfo diagnosticInfo = new DiagnosticInfo(); subscription.CreateMonitoredItem( request.TimestampsToReturn, request.ItemsToCreate[ii], result, diagnosticInfo); results.Add(result); diagnosticInfos.Add(diagnosticInfo); } // return the response. CreateMonitoredItemsResponseMessage response = new CreateMonitoredItemsResponseMessage(); response.ResponseHeader = CreateResponseHeader(request.RequestHeader); response.Results = results; response.DiagnosticInfos = diagnosticInfos; return response; } } catch (Exception e) { throw CreateSoapFault(request.RequestHeader, e); } }