public async Task <string> ReadAnItemAsyc(string name) { string item = ""; if (serverName != "") { try { var readRequestGetName = new Workstation.ServiceModel.Ua.ReadRequest { NodesToRead = new[] { new Workstation.ServiceModel.Ua.ReadValueId { NodeId = Workstation.ServiceModel.Ua.NodeId.Parse("ns=4;s=|var|" + serverName + "." + name), AttributeId = AttributeIds.Value } } }; var readResultName = await channel.ReadAsync(readRequestGetName); item = readResultName.Results[0].Value.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } return(item); }
/// <summary> /// Reads a list of Node attributes. /// </summary> /// <param name="client">A instance of <see cref="ISessionClient"/>.</param> /// <param name="request">A <see cref="ReadRequest"/>.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation that returns a <see cref="ReadResponse"/>.</returns> public static async Task<ReadResponse> ReadAsync(this ISessionClient client, ReadRequest request) { if (request == null) { throw new ArgumentNullException(nameof(request)); } return (ReadResponse)await client.RequestAsync(request).ConfigureAwait(false); }
public override async Task <VTQ[]> ReadDataItems(string group, IList <ReadRequest> items, Duration?timeout) { bool connected = await TryConnect(); if (!connected || connection == null) { return(GetBadVTQs(items)); } var readHelper = new ReadManager <ReadValueId, Workstation.ServiceModel.Ua.DataValue>(items, request => { NodeId node = mapId2Info[request.ID].Node ?? NodeId.Null; return(new ReadValueId { AttributeId = AttributeIds.Value, NodeId = node }); }); ReadValueId[] dataItemsToRead = readHelper.GetRefs(); try { VTQ[] result; if (dataItemsToRead.Length > 0) { var readRequest = new Workstation.ServiceModel.Ua.ReadRequest { NodesToRead = dataItemsToRead, TimestampsToReturn = TimestampsToReturn.Source, }; ReadResponse readResponse = await connection.ReadAsync(readRequest); readHelper.SetAllResults(readResponse.Results, (vv, request) => MakeVTQ(vv, request.LastValue, request.ID)); result = readHelper.values; } else { result = readHelper.values; } if (readExceptionWarning) { readExceptionWarning = false; ReturnToNormal("UAReadExcept", "ReadDataItems successful again"); } return(result); } catch (Exception exp) { Exception e = exp.GetBaseException() ?? exp; readExceptionWarning = true; LogWarn("UAReadExcept", $"Read exception: {e.Message}", details: e.ToString()); Task ignored = CloseChannel(); return(GetBadVTQs(items)); } }
public override async Task <VTQ[]> ReadDataItems(string group, IList <ReadRequest> items, Duration?timeout) { int N = items.Count; VTQ[] res = new VTQ[N]; bool connected = await TryConnect(); if (!connected) { for (int i = 0; i < N; ++i) { VTQ vtq = items[i].LastValue; vtq.Q = Quality.Bad; res[i] = vtq; } return(res); } ReadValueId[] dataItemsToRead = new ReadValueId[N]; for (int i = 0; i < N; ++i) { ReadRequest request = items[i]; NodeId node = mapId2Info[request.ID].Node ?? NodeId.Null; dataItemsToRead[i] = new ReadValueId { AttributeId = AttributeIds.Value, NodeId = node }; } var readRequest = new Workstation.ServiceModel.Ua.ReadRequest { NodesToRead = dataItemsToRead, TimestampsToReturn = TimestampsToReturn.Source, }; ReadResponse readResponse = await connection.ReadAsync(readRequest); for (int i = 0; i < N; ++i) { res[i] = MakeVTQ(readResponse.Results[i], items[i].LastValue, items[i].ID); } return(res); }
public async Task SessionTimeoutCausesFault() { // get or add application certificate. var localCertificate = this.localDescription.GetCertificate(); if (localCertificate == null) { throw new ServiceResultException(StatusCodes.BadSecurityChecksFailed, "Application certificate is missing."); } // discover available endpoints of server. var getEndpointsRequest = new GetEndpointsRequest { EndpointUrl = this.endpointUrl, ProfileUris = new[] { TransportProfileUris.UaTcpTransport } }; Console.WriteLine($"Discovering endpoints of '{getEndpointsRequest.EndpointUrl}'."); var getEndpointsResponse = await UaTcpDiscoveryClient.GetEndpointsAsync(getEndpointsRequest); var selectedEndpoint = getEndpointsResponse.Endpoints.OrderBy(e => e.SecurityLevel).Last(); var selectedTokenType = selectedEndpoint.UserIdentityTokens[0].TokenType; IUserIdentity selectedUserIdentity; switch (selectedTokenType) { case UserTokenType.UserName: selectedUserIdentity = new UserNameIdentity("root", "secret"); break; case UserTokenType.Certificate: selectedUserIdentity = new X509Identity(localCertificate); break; default: selectedUserIdentity = new AnonymousIdentity(); break; } var client = new UaTcpSessionClient( this.localDescription, localCertificate, selectedUserIdentity, selectedEndpoint) { SessionTimeout = 10000 }; Console.WriteLine($"Creating session with endpoint '{client.RemoteEndpoint.EndpointUrl}'."); Console.WriteLine($"SecurityPolicy: '{client.RemoteEndpoint.SecurityPolicyUri}'."); Console.WriteLine($"SecurityMode: '{client.RemoteEndpoint.SecurityMode}'."); await client.OpenAsync(); Console.WriteLine($"Activated session '{client.SessionId}'."); // server should close session due to inactivity await Task.Delay(20000); // should throw exception var readRequest = new ReadRequest { NodesToRead = new[] { new ReadValueId { NodeId = NodeId.Parse(VariableIds.Server_ServerStatus_CurrentTime), AttributeId = AttributeIds.Value } } }; await client.ReadAsync(readRequest); Console.WriteLine($"Closing session '{client.SessionId}'."); await client.CloseAsync(); }
public async Task SetChanel() { var clientDescription = new ApplicationDescription { ApplicationName = "Workstation.UaClient.FeatureTests", ApplicationUri = $"urn:{System.Net.Dns.GetHostName()}:Workstation.UaClient.FeatureTests", ApplicationType = Workstation.ServiceModel.Ua.ApplicationType.Client }; channel = new UaTcpSessionChannel( clientDescription, null, // no x509 certificates new AnonymousIdentity(), url, SecurityPolicyUris.None); try { await channel.OpenAsync(); var readRequestGetName = new Workstation.ServiceModel.Ua.ReadRequest { NodesToRead = new[] { new Workstation.ServiceModel.Ua.ReadValueId { NodeId = Workstation.ServiceModel.Ua.NodeId.Parse(Workstation.ServiceModel.Ua.VariableIds.Server_ServerStatus), AttributeId = AttributeIds.Value } } }; var readResultName = await channel.ReadAsync(readRequestGetName); var serverStatusGetName = readResultName.Results[0].GetValueOrDefault <Workstation.ServiceModel.Ua.ServerStatusDataType>(); serverName = serverStatusGetName.BuildInfo.ProductName; ReadValueId[] reads = new ReadValueId[itemsNames.Count]; int index = 0; names = new String[itemsNames.Count]; foreach (string name in itemsNames) { reads[index] = new Workstation.ServiceModel.Ua.ReadValueId { NodeId = Workstation.ServiceModel.Ua.NodeId.Parse("ns=4;s=|var|" + serverName + "." + name), AttributeId = AttributeIds.Value }; //MessageBox.Show(itemsNames.Count.ToString()); names[index] = name; index++; } readRequest = new Workstation.ServiceModel.Ua.ReadRequest { NodesToRead = reads }; } catch (Exception ex) { await channel.AbortAsync(); MessageBox.Show(ex.Message); } }