2246fdd395
Live-probed both against the local Historian 2020 (WCF): - R1.3 GetServerTimeZoneAsync: Status.GetSystemTimeZoneName returns rc=0 with an empty value under a real authenticated handle — a client-side stub in the GetServerTime family. gRPC/2023R2-only. Reverted the implementation. - R1.1 ExecuteSqlCommandAsync: Retrieval.ExeC returns native error type 4 / code 51 (InvalidParameter); the contract-3 string-handle ops require an unmapped native session/filter registration step (the StartTagQuery wall). Adds an M1a re-classification note steering future work toward proven uint-handle / already-wired ops (R1.4 GETHI next) over string-handle ops. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.4 KiB
2.4 KiB
WCF Status Evidence
Commands:
dotnet run --no-build --project tools\AVEVA.Historian.ReverseEngineering -- wcf-status localhost 32568
dotnet run --no-build --project tools\AVEVA.Historian.ReverseEngineering -- wcf-status localhost 32568 Version
Confirmed:
- The local status endpoint is
net.tcp://localhost:32568/Stat. IStatusServiceContract2is a static WCF contract namedStatin namespaceaa. The managed definitions now includeGetSystemParameter,GETHI,PNGS, andPNGP.GetInterfaceVersionreturns code0, version0on the local 2020 install.- The decompiled
CStatusConnectionWCF.GetServerTimeimplementation is a WCF-path stub that returns success without calling theStatservice. The managed direct call likewise returns code0with size0and no buffer.
Observed sanitized localhost results:
GetSystemTimeZoneName(handle: 0)returns code4and no value.IsDBCaseSensitive(handle: 0)returns code4.GetSystemParameter(handle: 0, "Version")returnsfalsewith no error buffer.
Re-tested 2026-06-20 with a real authenticated client handle (full Open2 auth
chain), not handle: 0:
GetSystemParameter(handle, "HistorianVersion")→ real version string (works; shipped asGetSystemParameterAsync).GetSystemTimeZoneName(handle)→ return code0x00000000(success) but an empty value string. Same channel/handle that makesGetSystemParameterreturn real data, so this is the op's own behavior, not an auth/marshalling gap.GetSystemTimeZoneNameis a member of theGetServerTimestub family: the 2020 WCF path returns success without producing a value (the native client computes the zone locally). It only becomes a real round-trip on the 2023 R2 gRPC front door (Status.GetSystemTimeZoneName), which is absent on this box.
Interpretation:
Statendpoint routing is confirmed, but status operations that require a real client handle are not usable until managed session open is solved.GetServerTimeshould not be promoted into the public SDK as a real server time call from this WCF path; native evidence shows it is a no-op stub here.GetServerTimeZoneAsync(roadmap R1.3) is NOT a trivial WCF op on 2020 — it is a stub returning empty. Do not ship it over the 2020 WCF transport. Deliver it only against a live 2023 R2 gRPC server. Reclassified indocs/plans/hcal-roadmap.md.