Add 2023 R2 gRPC transport (RemoteGrpc) reusing native byte payloads
Stands up HistorianTransport.RemoteGrpc end-to-end for the read path, built on the recovered 2023 R2 gRPC contract (gRPC-Web/HTTP-1.1, port 32565, gzip). The opaque protobuf `bytes` fields carry the SAME native binary payloads as the 2020 WCF/MDAS path, so the proven serializers and parsers are reused unchanged. - Grpc/Protos/*.proto: 6 protoc-validated contracts recovered from embedded FileDescriptors (authoritative, not guessed). - Grpc/HistorianGrpcChannelFactory: GrpcWebHandler/HTTP-1.1 channel, ResolvePort/ResolveAddress, optional TLS + gzip. - Grpc/HistorianGrpcReadOrchestrator: mirrors the WCF read chain over gRPC; auth uses HistoryService.ExchangeKey (the gRPC ValCl op). - Wcf/HistorianNativeHandshake: transport-agnostic Open2 request builder + SSPI/Negotiate token loop + response decode, shared by WCF and gRPC. - Op map (2020 -> gRPC): ValCl->ExchangeKey, Open2->OpenConnection, StartQuery2->StartQuery, GetNextQueryResultBuffer2->GetNextQueryResultBuffer. - HistorianClientOptions: DefaultGrpcPort=32565, GrpcUseTls. - csproj: Google.Protobuf, Grpc.Net.Client(.Web), Grpc.Tools codegen. Not yet live-verified against a 2023 R2 server: ExchangeKey is the first thing to revisit if a live server rejects the handshake; the inner byte payloads are the proven 2020 protocol. Gated live test via HISTORIAN_GRPC_HOST. 188 unit tests green; build clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
// Recovered from TransactionService.proto (AVEVA Historian SDK 2023 R2, Archestra.Grpc.Contract).
|
||||
// Reconstructed from the embedded protobuf FileDescriptor; field numbers are authoritative.
|
||||
syntax = "proto3";
|
||||
|
||||
import "Status.proto";
|
||||
|
||||
option csharp_namespace = "ArchestrA.Grpc.Contract.Transaction";
|
||||
|
||||
message ForwardSnapshotRequest {
|
||||
string strHandle = 1;
|
||||
string strSessionID = 2;
|
||||
uint32 queryID = 3;
|
||||
uint64 snapShotChunkOffset = 4;
|
||||
bytes btInput = 5;
|
||||
}
|
||||
|
||||
message ForwardSnapshotResponse {
|
||||
.Status status = 1;
|
||||
}
|
||||
|
||||
message ForwardSnapshotBeginRequest {
|
||||
string strHandle = 1;
|
||||
uint64 totalSize = 2;
|
||||
uint64 startTime = 3;
|
||||
uint64 endTime = 4;
|
||||
}
|
||||
|
||||
message ForwardSnapshotBeginResponse {
|
||||
string strSessionID = 1;
|
||||
uint32 queryID = 2;
|
||||
.Status status = 3;
|
||||
}
|
||||
|
||||
message ForwardSnapshotEndRequest {
|
||||
string strHandle = 1;
|
||||
string strSessionID = 2;
|
||||
uint32 queryID = 3;
|
||||
bytes timeRange = 4;
|
||||
}
|
||||
|
||||
message ForwardSnapshotEndResponse {
|
||||
bytes tagIds = 1;
|
||||
.Status status = 2;
|
||||
}
|
||||
|
||||
message GetTransactionInterfaceVersionRequest {
|
||||
}
|
||||
|
||||
message GetTransactionInterfaceVersionResponse {
|
||||
uint32 error = 1;
|
||||
uint32 version = 2;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesBeginRequest {
|
||||
string strHandle = 1;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesBeginResponse {
|
||||
.Status status = 1;
|
||||
string strTransactionId = 2;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesRequest {
|
||||
string strHandle = 1;
|
||||
string strTransactionId = 2;
|
||||
bytes btInput = 3;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesResponse {
|
||||
.Status status = 1;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesEndRequest {
|
||||
string strHandle = 1;
|
||||
string strTransactionId = 2;
|
||||
bool bCommit = 3;
|
||||
}
|
||||
|
||||
message AddNonStreamValuesEndResponse {
|
||||
.Status status = 1;
|
||||
}
|
||||
|
||||
service TransactionService {
|
||||
rpc ForwardSnapshot (.ForwardSnapshotRequest) returns (.ForwardSnapshotResponse);
|
||||
rpc ForwardSnapshotBegin (.ForwardSnapshotBeginRequest) returns (.ForwardSnapshotBeginResponse);
|
||||
rpc ForwardSnapshotEnd (.ForwardSnapshotEndRequest) returns (.ForwardSnapshotEndResponse);
|
||||
rpc GetTransactionInterfaceVersion (.GetTransactionInterfaceVersionRequest) returns (.GetTransactionInterfaceVersionResponse);
|
||||
rpc AddNonStreamValuesBegin (.AddNonStreamValuesBeginRequest) returns (.AddNonStreamValuesBeginResponse);
|
||||
rpc AddNonStreamValues (.AddNonStreamValuesRequest) returns (.AddNonStreamValuesResponse);
|
||||
rpc AddNonStreamValuesEnd (.AddNonStreamValuesEndRequest) returns (.AddNonStreamValuesEndResponse);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user