1e9a87fce9
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>
418 lines
9.3 KiB
Protocol Buffer
418 lines
9.3 KiB
Protocol Buffer
// Recovered from StorageService.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.Storage";
|
|
|
|
message GetInterfaceVersionRequest {
|
|
}
|
|
|
|
message GetInterfaceVersionResponse {
|
|
uint32 uiError = 1;
|
|
uint32 uiVersion = 2;
|
|
}
|
|
|
|
message OpenStorageConnectionRequest {
|
|
string HostName = 1;
|
|
string EnginePath = 2;
|
|
uint32 FreeDiskSpace = 3;
|
|
string ProcessName = 4;
|
|
uint32 ProcessId = 5;
|
|
string UserName = 6;
|
|
bytes Password = 7;
|
|
uint32 PwdLength = 8;
|
|
uint32 ClientType = 9;
|
|
uint32 ClientVersion = 10;
|
|
uint32 ConnectionMode = 11;
|
|
uint32 ConnectionTimeout = 12;
|
|
string StorageSessionId = 13;
|
|
}
|
|
|
|
message OpenStorageConnectionResponse {
|
|
.Status status = 1;
|
|
string StorageSessionId = 2;
|
|
uint32 Handle = 3;
|
|
uint64 ConnectionTime = 4;
|
|
uint32 ServerStatus = 5;
|
|
}
|
|
|
|
message CloseStorageConnectionRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message CloseStorageConnectionResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message PingRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message PingResponse {
|
|
.Status status = 1;
|
|
uint32 OutByteCount = 2;
|
|
bytes OutBuff = 3;
|
|
}
|
|
|
|
message AddTagsRequest {
|
|
uint32 Handle = 1;
|
|
uint32 ElementCount = 2;
|
|
uint32 InByteCount = 3;
|
|
bytes InBuff = 4;
|
|
}
|
|
|
|
message AddTagsResponse {
|
|
.Status status = 1;
|
|
uint32 OutByteCount = 2;
|
|
bytes OutBuff = 3;
|
|
}
|
|
|
|
message RegisterTagsRequest {
|
|
uint32 Handle = 1;
|
|
uint32 ElementCount = 2;
|
|
uint32 InByteCount = 3;
|
|
bytes InBuff = 4;
|
|
}
|
|
|
|
message RegisterTagsResponse {
|
|
.Status status = 1;
|
|
uint32 OutByteCount = 2;
|
|
bytes OutBuff = 3;
|
|
}
|
|
|
|
message AddStreamValuesRequest {
|
|
uint32 Handle = 1;
|
|
uint32 Size = 2;
|
|
bytes Buffer = 3;
|
|
}
|
|
|
|
message AddStreamValuesResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message GetTagIdsRequest {
|
|
uint32 Handle = 1;
|
|
uint32 Sequence = 2;
|
|
}
|
|
|
|
message GetTagIdsResponse {
|
|
.Status status = 1;
|
|
uint32 Sequence = 2;
|
|
uint32 Size = 3;
|
|
bytes TagIds = 4;
|
|
}
|
|
|
|
message GetTagsRequest {
|
|
uint32 Handle = 1;
|
|
uint32 TagIdsSize = 2;
|
|
bytes TagIds = 3;
|
|
uint32 Sequence = 4;
|
|
}
|
|
|
|
message GetTagsResponse {
|
|
.Status status = 1;
|
|
uint32 Sequence = 2;
|
|
uint32 TagInfosSize = 3;
|
|
bytes TagInfos = 4;
|
|
}
|
|
|
|
message FlushMetadataRequest {
|
|
uint32 Handle = 1;
|
|
uint32 TagIdsSize = 2;
|
|
bytes TagIds = 3;
|
|
}
|
|
|
|
message FlushMetadataResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message FlushDataRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message FlushDataResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message LoadBlocksRequest {
|
|
uint32 Handle = 1;
|
|
uint32 Sequence = 2;
|
|
}
|
|
|
|
message LoadBlocksResponse {
|
|
.Status status = 1;
|
|
uint32 Sequence = 2;
|
|
uint32 HistoryBlockSize = 3;
|
|
bytes HistoryBlocks = 4;
|
|
}
|
|
|
|
message GetSnapshotsRequest {
|
|
uint32 Handle = 1;
|
|
uint64 BlockStartTime = 2;
|
|
uint32 Sequence = 3;
|
|
}
|
|
|
|
message GetSnapshotsResponse {
|
|
.Status status = 1;
|
|
uint32 Sequence = 2;
|
|
uint32 SnapshotSize = 3;
|
|
bytes Snapshot = 4;
|
|
}
|
|
|
|
message StartQuerySnapshotRequest {
|
|
uint32 Handle = 1;
|
|
uint64 BlockStartTime = 2;
|
|
uint32 SnapshotInfoSize = 3;
|
|
bytes SnapshotInfo = 4;
|
|
uint32 SnapshotQueryId = 5;
|
|
}
|
|
|
|
message StartQuerySnapshotResponse {
|
|
.Status status = 1;
|
|
uint32 SnapshotQueryId = 2;
|
|
}
|
|
|
|
message NextQuerySnapshotRequest {
|
|
uint32 Handle = 1;
|
|
uint32 SnapshotQueryId = 2;
|
|
uint32 Sequence = 3;
|
|
}
|
|
|
|
message NextQuerySnapshotResponse {
|
|
.Status status = 1;
|
|
uint32 Sequence = 2;
|
|
uint32 SnapshotSize = 3;
|
|
bytes Snapshot = 4;
|
|
}
|
|
|
|
message EndSnapshotRequest {
|
|
uint32 Handle = 1;
|
|
uint32 SnapshotQueryId = 2;
|
|
uint64 BlockStartTime = 3;
|
|
uint32 SnapshotInfoSize = 4;
|
|
bytes SnapshotInfo = 5;
|
|
bool IsDeleteSnapshot = 6;
|
|
}
|
|
|
|
message EndSnapshotResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message StopRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message StopResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message ClearTagidPairsRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message ClearTagidPairsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message AddTagidPairsRequest {
|
|
uint32 Handle = 1;
|
|
uint32 ElementCount = 2;
|
|
uint32 InByteCount = 3;
|
|
bytes InBuff = 4;
|
|
}
|
|
|
|
message AddTagidPairsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message GetSFParameterRequest {
|
|
uint32 Handle = 1;
|
|
string ParameterName = 2;
|
|
}
|
|
|
|
message GetSFParameterResponse {
|
|
.Status status = 1;
|
|
string ParamaterValue = 2;
|
|
}
|
|
|
|
message SetSFParameterRequest {
|
|
uint32 Handle = 1;
|
|
string ParamaterName = 2;
|
|
string ParamaterValue = 3;
|
|
}
|
|
|
|
message SetSFParameterResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message SendSnapshotBeginRequest {
|
|
uint32 Handle = 1;
|
|
uint64 TotalSize = 2;
|
|
uint64 StartTime = 3;
|
|
uint64 EndTime = 4;
|
|
string StorageSessionId = 5;
|
|
}
|
|
|
|
message SendSnapshotBeginResponse {
|
|
.Status status = 1;
|
|
string StorageSessionId = 2;
|
|
uint32 QueryId = 3;
|
|
}
|
|
|
|
message SendSnapshotEndRequest {
|
|
uint32 Handle = 1;
|
|
string StorageSessionId = 2;
|
|
uint32 QueryId = 3;
|
|
uint32 TimeRangeSize = 4;
|
|
bytes TimeRangeBytes = 5;
|
|
}
|
|
|
|
message SendSnapshotEndResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message SendSnapshotRequest {
|
|
uint32 Handle = 1;
|
|
string StorageSessionId = 2;
|
|
uint32 QueryId = 3;
|
|
uint32 Size = 4;
|
|
uint64 SnapShotChunkOffset = 5;
|
|
bytes Buffer = 6;
|
|
}
|
|
|
|
message SendSnapshotResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message DeleteSnapshotRequest {
|
|
uint32 Handle = 1;
|
|
uint64 StartTime = 2;
|
|
uint32 SnapshotInfoSize = 3;
|
|
bytes SnapshotInfo = 4;
|
|
}
|
|
|
|
message DeleteSnapshotResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message AddStreamValues2Request {
|
|
uint32 Handle = 1;
|
|
string ShardId = 2;
|
|
bytes Buffer = 3;
|
|
}
|
|
|
|
message AddStreamValues2Response {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message ClearShardTagidsRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message ClearShardTagidsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message AddShardTagidsRequest {
|
|
uint32 Handle = 1;
|
|
bytes Buffer = 2;
|
|
}
|
|
|
|
message AddShardTagidsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message SplitUnknownShardsRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message SplitUnknownShardsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message GetRemainingSnapshotsSizeRequest {
|
|
uint32 Handle = 1;
|
|
}
|
|
|
|
message GetRemainingSnapshotsSizeResponse {
|
|
.Status status = 1;
|
|
uint64 SnapshotSize = 2;
|
|
}
|
|
|
|
message DeleteTagsRequest {
|
|
uint32 Handle = 1;
|
|
bytes Buffer = 2;
|
|
}
|
|
|
|
message DeleteTagsResponse {
|
|
.Status status = 1;
|
|
}
|
|
|
|
message OpenStorageConnection2Request {
|
|
bytes InParameters = 1;
|
|
}
|
|
|
|
message OpenStorageConnection2Response {
|
|
.Status status = 1;
|
|
bytes OutParmaters = 2;
|
|
}
|
|
|
|
message ValidateClientCredentialRequest {
|
|
string Handle = 1;
|
|
bytes InBuff = 2;
|
|
}
|
|
|
|
message ValidateClientCredentialResponse {
|
|
.Status status = 1;
|
|
bytes OutBuff = 2;
|
|
}
|
|
|
|
message GetInfoRequest {
|
|
string Request = 1;
|
|
}
|
|
|
|
message GetInfoResponse {
|
|
.Status status = 1;
|
|
bytes info = 2;
|
|
}
|
|
|
|
service StorageService {
|
|
rpc GetInterfaceVersion (.GetInterfaceVersionRequest) returns (.GetInterfaceVersionResponse);
|
|
rpc OpenStorageConnection (.OpenStorageConnectionRequest) returns (.OpenStorageConnectionResponse);
|
|
rpc CloseStorageConnection (.CloseStorageConnectionRequest) returns (.CloseStorageConnectionResponse);
|
|
rpc Ping (.PingRequest) returns (.PingResponse);
|
|
rpc AddTags (.AddTagsRequest) returns (.AddTagsResponse);
|
|
rpc RegisterTags (.RegisterTagsRequest) returns (.RegisterTagsResponse);
|
|
rpc AddStreamValues (.AddStreamValuesRequest) returns (.AddStreamValuesResponse);
|
|
rpc GetTagIds (.GetTagIdsRequest) returns (.GetTagIdsResponse);
|
|
rpc GetTags (.GetTagsRequest) returns (.GetTagsResponse);
|
|
rpc FlushMetadata (.FlushMetadataRequest) returns (.FlushMetadataResponse);
|
|
rpc FlushData (.FlushDataRequest) returns (.FlushDataResponse);
|
|
rpc LoadBlocks (.LoadBlocksRequest) returns (.LoadBlocksResponse);
|
|
rpc GetSnapshots (.GetSnapshotsRequest) returns (.GetSnapshotsResponse);
|
|
rpc StartQuerySnapshot (.StartQuerySnapshotRequest) returns (.StartQuerySnapshotResponse);
|
|
rpc NextQuerySnapshot (.NextQuerySnapshotRequest) returns (.NextQuerySnapshotResponse);
|
|
rpc EndSnapshot (.EndSnapshotRequest) returns (.EndSnapshotResponse);
|
|
rpc Stop (.StopRequest) returns (.StopResponse);
|
|
rpc ClearTagidPairs (.ClearTagidPairsRequest) returns (.ClearTagidPairsResponse);
|
|
rpc AddTagidPairs (.AddTagidPairsRequest) returns (.AddTagidPairsResponse);
|
|
rpc GetSFParameter (.GetSFParameterRequest) returns (.GetSFParameterResponse);
|
|
rpc SetSFParameter (.SetSFParameterRequest) returns (.SetSFParameterResponse);
|
|
rpc SendSnapshotBegin (.SendSnapshotBeginRequest) returns (.SendSnapshotBeginResponse);
|
|
rpc SendSnapshotEnd (.SendSnapshotEndRequest) returns (.SendSnapshotEndResponse);
|
|
rpc SendSnapshot (.SendSnapshotRequest) returns (.SendSnapshotResponse);
|
|
rpc DeleteSnapshot (.DeleteSnapshotRequest) returns (.DeleteSnapshotResponse);
|
|
rpc AddStreamValues2 (.AddStreamValues2Request) returns (.AddStreamValues2Response);
|
|
rpc ClearShardTagids (.ClearShardTagidsRequest) returns (.ClearShardTagidsResponse);
|
|
rpc AddShardTagids (.AddShardTagidsRequest) returns (.AddShardTagidsResponse);
|
|
rpc SplitUnknownShards (.SplitUnknownShardsRequest) returns (.SplitUnknownShardsResponse);
|
|
rpc GetRemainingSnapshotsSize (.GetRemainingSnapshotsSizeRequest) returns (.GetRemainingSnapshotsSizeResponse);
|
|
rpc DeleteTags (.DeleteTagsRequest) returns (.DeleteTagsResponse);
|
|
rpc OpenStorageConnection2 (.OpenStorageConnection2Request) returns (.OpenStorageConnection2Response);
|
|
rpc ValidateClientCredential (.ValidateClientCredentialRequest) returns (.ValidateClientCredentialResponse);
|
|
rpc GetInfo (.GetInfoRequest) returns (.GetInfoResponse);
|
|
}
|
|
|