Я пытаюсь подключиться к серверу opcua с неизвестным securityMode и securityPolicy.Возможно, у меня есть проблема с базовым пониманием, но согласно спецификации OPCUA я могу получить EndpointDescription через локальный DiscoveryServer, а затем открыть SecureChannel (сеанс).
В настоящее время я подключаюсь к серверу без указания параметров безопасности, считываю конечные точки, а затем выбираю соответствующий параметр безопасности и повторно подключаюсь.
const getEndpoints = function (endpointUrl) {
return new Promise(function (resolve, reject) {
let client = new opcua.OPCUAClient();
client.connect(endpointUrl, function (err) {
if(err) reject(new Error(err));
client.getEndpointsRequest(function (err,endpoints) {
let reducedEndpoints = endpoints.map(endpoint =>
({
endpointUrl: endpoint.endpointUrl,
securityMode: endpoint.securityMode,
securityPolicy: endpoint.securityPolicyUri,
})
);
resolve(endpoints);
// resolve(reducedEndpoints);
client.disconnect();
})
})
})
}
const connect = function (endpointUrl, options) {
return new Promise(function (resolve, reject) {
const defaultOptions = {
connectionStrategy: {
maxRetry: 6,
},
keepSessionAlive: true,
endpoint_must_exist: false,
securityMode: options.MessageSecurityMode.NONE,
securityPolicy: SecurityPolicy.None,
};
let client = new opcua.OPCUAClient(Object.assign({}, defaultOptions, options));
client.connect(endpointUrl, function (err) {
if(err) {
reject(new Error(err));
}
resolve(client)
});
});
};
Это не кажется правильным.Было бы хорошо, если бы кто-нибудь помог мне с примером.
С наилучшими пожеланиями