Closed jnjoni closed 1 year ago
I guess there is no way right now. It would be good for future questions to give us at least the class name to be sure that we are talking about the same.
One way is to add this option when you open the channel.
public async Task Read()
{
var channel = new ClientSessionChannel(
localDescription,
certificateStore,
new AnonymousIdentity(),
EndpointUrl,
loggerFactory: loggerFactory,
options: new ClientSessionChannelOptions { TimeoutHint = 30000 });
await channel.OpenAsync();
logger.LogInformation($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'.");
logger.LogInformation($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'.");
logger.LogInformation($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'.");
logger.LogInformation($"Activated session '{channel.SessionId}'.");
var readRequest = new ReadRequest { NodesToRead = new[] { new ReadValueId { NodeId = NodeId.Parse(VariableIds.Server_ServerStatus), AttributeId = AttributeIds.Value } } };
var readResult = await channel.ReadAsync(readRequest);
var serverStatus = readResult.Results[0].GetValueOrDefault<ServerStatusDataType>();
logger.LogInformation("Server status:");
logger.LogInformation(" ProductName: {0}", serverStatus.BuildInfo.ProductName);
logger.LogInformation(" SoftwareVersion: {0}", serverStatus.BuildInfo.SoftwareVersion);
logger.LogInformation(" ManufacturerName: {0}", serverStatus.BuildInfo.ManufacturerName);
logger.LogInformation(" State: {0}", serverStatus.State);
logger.LogInformation(" CurrentTime: {0}", serverStatus.CurrentTime);
logger.LogInformation($"Closing session '{channel.SessionId}'.");
await channel.CloseAsync();
}
Another way is to set a property of the RequestHeader. The default TimeoutHint is 15000 (15 seconds)
public async Task Read()
{
var channel = new ClientSessionChannel(
localDescription,
certificateStore,
new AnonymousIdentity(),
EndpointUrl,
loggerFactory: loggerFactory);
await channel.OpenAsync();
logger.LogInformation($"Opened session with endpoint '{channel.RemoteEndpoint.EndpointUrl}'.");
logger.LogInformation($"SecurityPolicy: '{channel.RemoteEndpoint.SecurityPolicyUri}'.");
logger.LogInformation($"SecurityMode: '{channel.RemoteEndpoint.SecurityMode}'.");
logger.LogInformation($"Activated session '{channel.SessionId}'.");
var readRequest = new ReadRequest { RequestHeader = new RequestHeader { TimeoutHint = 30000 }, NodesToRead = new[] { new ReadValueId { NodeId = NodeId.Parse(VariableIds.Server_ServerStatus), AttributeId = AttributeIds.Value } } };
var readResult = await channel.ReadAsync(readRequest);
var serverStatus = readResult.Results[0].GetValueOrDefault<ServerStatusDataType>();
logger.LogInformation("Server status:");
logger.LogInformation(" ProductName: {0}", serverStatus.BuildInfo.ProductName);
logger.LogInformation(" SoftwareVersion: {0}", serverStatus.BuildInfo.SoftwareVersion);
logger.LogInformation(" ManufacturerName: {0}", serverStatus.BuildInfo.ManufacturerName);
logger.LogInformation(" State: {0}", serverStatus.State);
logger.LogInformation(" CurrentTime: {0}", serverStatus.CurrentTime);
logger.LogInformation($"Closing session '{channel.SessionId}'.");
await channel.CloseAsync();
}
Hi, Is there a way to set the timeout for ReadAsync. I'm having some slow devices and sometimes i get the Timeout exception. Regards Joakim