11:41, EEST
February 21, 2014
Hello,
I’d like to build a UaServer which forwards some serviceCalls to external underlying servers through respective UaClients. Effectively an aggregating server. I suspects that I should somehow make use of the ExternalNodeManager and externalNodes. Is there some sample code or some instructions available of how to forward calls to underlying servers or on how to use the ExternalNodeManager?
Many thanks,
Hans-Uwe
7:21, EEST
February 7, 2014
To relay service calls, you should override the service handlers of which service calls you want to forward. These service handlers should then have access to some client implementation, which propagates the call to the underlying servers (e.g. read, write, browse address space). For further information, see e.g. my Master’s Thesis on the very subject:
https://aaltodoc.aalto.fi/handle/123456789/13027
Best regards,
Jukka Asikainen
7:38, EEST
December 21, 2011
The way Jukka describes it is the “perfect” way to do it, simply passing everything to the underlying server(s). Unfortunately, modifying the service handlers for this is not documented, but you can probably sort it out from the source code of the standard handlers (if you have it).
It may of course be possible to pass the calls using the various managers as well. The key part, which you have probably noticed already, is working with the namespaces and converting the NodeIds – or the namespaceIndexes in those – between the servers.
The ExternalNodeManager is rather for managing nodes (ExternalNodes) that are referred to from actual UaNode objects, but do not exist in this server, at least as real UaNode objects. I am not sure how those should play the role in this kind of a design.
20:13, EEST
February 21, 2014
Thank you, both Jukka and Aro,
the idea of external nodes is to use those as the addressSpace representation for nodes in the underlying server(s) and thereby avoiding the addition of “translation” namespaces. Unfortunately, this doesn’t quite work as I had hoped, because the ReferenceDescriptions contain the referenceTypeId as a localNodeId (not as an ExpandedNodeId). Right now my approach uses a “ForwardingNodeManager” – one each per underlying server serving all namespaceUris of the remote server. I guess the modification of the serviceHandler will be more efficient. I will try this next. Sources are available.
Thank you very much, Hans-Uwe
Most Users Ever Online: 1919
Currently Online:
61 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 738
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1524
Posts: 6451
Newest Members:
jonathonmcintyre, fannielima, kristiewinkle8, rust, christamcdowall, redaahern07571, nigelbdhmp, travistimmons, AnnelCib, dalenegettingerModerators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1026, Jimmy Ni: 26, Matti Siponen: 346, Lusetti: 0
Administrators: admin: 1