Hi,

I have been working on a native driver for OPCUA and am seeing an issue
with the ordering of messages sent over the wire.

For each message that gets sent over the wire, A transaction ID is assigned
to it. These transaction IDs need to be received by the server in order. At
the moment I'm using (Well planning on using) the RequestTransactionManager
class to assign the ID.

A typical sequence is:-

   1. I request the ID
   2. create the message
   3. encrypt the message
   4. submit it to be sent

However between creating the ID and sending it, it leaves it open for
another message from a separate thread to be sent with a later transaction
ID. This would result in the server ignoring the out of sequence messages.

Looking at the RequestTransactionManager class it seems to retain the order
of when the message is submitted and not the transaction id order. I have a
couple of options and am looking for some feedback:-

   - Change the RequestTransactionManager class so that it processes the
   requests in the transaction ID order instead of the submitted  order.
   - Create a class that retains the transaction id order.
   - Modify the RequestTransactionManager to have the option between the
   two.

I'd prefer modifying the existing class to use the transaction id order,
but don't know enough about the other protocols PLC4X supports to say that
it won't affect them.

Kind Regards

Ben

Reply via email to