OPCFoundation / UA-.NETStandard

OPC Unified Architecture .NET Standard
Other
1.97k stars 950 forks source link

DataDictionaries which are larger than the servers Transport Quota Encoding limits cannot be read #2781

Closed ThomasNehring closed 1 month ago

ThomasNehring commented 1 month ago

Type of issue

Current Behavior

If the server side transport quota MaxByteStringLength is smaller than the size of a byte string exposed in the server address space the attempt to read the value of this byte string results in a BadEncodingLimitsExceeded status code. This can be addressed by a client by reading the ByteString in chunks of size MaxByteStringLength. In case the byte string is a DataDictionary instance (according to the v103 spec), this is, however, not so easy, since the read service call is buried rather deeply in the processing logic for reading and evaluating the data dictionary. A client which would want to fix this on application side would have to replicate parts of that logic.

Expected Behavior

Especially in the situation where at least one of client and server does not support the v104 way of defining structured data types and custom types, the stack functionality should allow to read a data dictionary even if its size exceeds the encoding limits for bytestrings. This amounts to supporting the reading of a byte string in chunks.

Steps To Reproduce

  1. Compile the UA Reference Solution.
  2. For the Console Reference Server, set the MaxByteStringLength to a value which is smaller than one of the two built-in data type dictionaries (4096 will do ;-)
  3. try to read a data type dictionary with a client which only supports v103 of the spec, or by directly trying to read the node "ns=0;i=7617"

Environment

- OS:
- Environment:
- Runtime:
- Nuget Version:
- Component:
- Server: master branch as of 202401002 (1.4.372.116)
- Client: same as server

Anything else?

I'll provide a pull request with a solution proposal shortly.