fix(grpc): extended-property read parser + GetConnectionStatus over gRPC
- HistorianTagExtendedPropertyProtocol.ParseResponse: fix the multi-property/ multi-group response shape captured live from the 2023 R2 server. The server returns one group per property (the tag name repeats), each propertyCount=1, and a uint16 searchability-flags trailer per property (0x0003 built-in, 0x0001 user- added) — NOT the single-byte group trailer the old model assumed, which drifted one byte per group and threw "expected 0x09 found 0x01" on any buffer with more than one property. Now reads the per-property uint16 trailer (tolerates a legacy 1-byte tail). Fixes read-back on both WCF and gRPC. Adds GetTagExtendedPropertiesRaw for future captures. - HistorianGrpcStatusClient.GetConnectionStatusAsync (plan #5): synthesize connection status from a measured gRPC handshake (OpenConnection yielding a storage-session GUID => connected), mirroring the WCF synthesize-from-probe approach. Routed in Historian2020ProtocolDialect on UseGrpc (the WCF path used the MDAS binding, which can't reach the gRPC port). - HistorianGrpcSqlClient: record the negative plan-#4 result — a HistoryService. RegisterTags prime does NOT clear the server-side CSrvDbConnection fault (tried live on both 0x402/0x401); the op stays bounded behind ProtocolEvidenceMissingException. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01B6mcaT2PjRFKcogzp9UkfC
This commit is contained in:
@@ -21,10 +21,14 @@ namespace AVEVA.Historian.Client.Grpc;
|
||||
/// <c>System.IndexOutOfRangeException ... at aahClientAccessPoint.CSrvDbConnection.ExecuteSqlCommand</c>.
|
||||
/// This is a server-side <c>CSrvDbConnection</c> (SQL DB-connection) precondition that the pure
|
||||
/// managed gRPC session does not establish — the same class of wall as
|
||||
/// <c>StorageService.OpenStorageConnection</c> (whose real precondition is the front-door
|
||||
/// <c>HistoryService.RegisterTags</c> family). Priming <c>Retr.GetV</c> does not clear it. The request
|
||||
/// framing here is the captured/expected shape; the op stays bounded behind
|
||||
/// <see cref="ProtocolEvidenceMissingException"/> until the DB-connection registration is reproduced.
|
||||
/// <c>StorageService.OpenStorageConnection</c>. Priming <c>Retr.GetV</c> does not clear it, and
|
||||
/// <b>a <c>HistoryService.RegisterTags</c> prime does NOT clear it either</b> (tried live 2026-06-22 on
|
||||
/// both read-only <c>0x402</c> and write-enabled <c>0x401</c> sessions: <c>RegisterTags</c> itself
|
||||
/// returned false and <c>ExecuteSqlCommand</c> faulted with the identical native-38 IndexOutOfRange) —
|
||||
/// so unlike the OpenStorageConnection wall, the SQL DB-connection context is not established by the
|
||||
/// RegisterTags family. The request framing here is the captured/expected shape; the op stays bounded
|
||||
/// behind <see cref="ProtocolEvidenceMissingException"/> until the DB-connection registration is
|
||||
/// reproduced. Use the WCF transport for SQL.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
internal static class HistorianGrpcSqlClient
|
||||
|
||||
Reference in New Issue
Block a user