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:
Joseph Doherty
2026-06-19 14:27:47 -04:00
parent 5efa767721
commit 1e9a87fce9
18 changed files with 1991 additions and 117 deletions
@@ -0,0 +1,209 @@
// Recovered from HistoryService.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.History";
message CreateTagResponse {
bool bSuccess = 1;
bytes tagid = 2;
}
message GetInterfaceVersionRequest {
}
message GetInterfaceVersionResponse {
uint32 uiError = 1;
uint32 uiVersion = 2;
}
message OpenConnectionRequest {
bytes btConnectionRequest = 1;
}
message OpenConnectionResponse {
.Status status = 1;
bytes btConnectionResponse = 2;
}
message CloseConnectionRequest {
string strHandle = 1;
}
message CloseConnectionResponse {
.Status status = 1;
}
message UpdateClientStatusRequest {
string strHandle = 1;
bytes btClientStatus = 2;
}
message UpdateClientStatusResponse {
.Status status = 1;
bytes btServerStatus = 2;
}
message RegisterTagsRequest {
string strHandle = 1;
bytes btTagInfos = 2;
}
message RegisterTagsResponse {
.Status status = 1;
bytes btTagStatus = 2;
}
message EnsureTagsRequest {
string strHandle = 1;
bytes btTagInfos = 2;
uint32 elementCount = 3;
}
message EnsureTagsResponse {
.Status status = 1;
bytes btTagStatus = 2;
}
message AddStreamValuesRequest {
string strHandle = 1;
bytes btValues = 2;
}
message AddStreamValuesResponse {
.Status status = 1;
}
message TagExtendedProperty {
enum TagExtendedPropertyDataType {
String = 0;
Int16 = 1;
Int32 = 2;
Int64 = 3;
Double = 4;
Boolean = 5;
DateTimeOffset = 6;
Guid = 7;
Geography = 8;
Geometry = 9;
}
string PropertyName = 1;
.TagExtendedProperty.TagExtendedPropertyDataType type = 2;
bytes value = 3;
bool Facetable = 4;
bool Searchable = 5;
bool SubstringSearchable = 6;
}
message TagExtendedPropertyGroup {
string tagname = 1;
repeated .TagExtendedProperty TagExtendedProperties = 2;
}
message AddTagExtendedPropertyRequest {
string strHandle = 1;
repeated .TagExtendedPropertyGroup TagExtendedPropertyGroups = 2;
}
message AddTagExtendedPropertyResponse {
.Status status = 1;
}
message ExchangeKeyRequest {
string strHandle = 1;
bytes btInput = 2;
}
message ExchangeKeyResponse {
.Status status = 1;
bytes btOutput = 2;
}
message StartJobRequest {
string strHandle = 1;
bytes btInput = 2;
}
message StartJobResponse {
.Status status = 1;
string strJobid = 2;
}
message GetJobStatusRequest {
string strHandle = 1;
string strJobid = 2;
}
message GetJobStatusResponse {
.Status status = 1;
bytes btJobStatus = 2;
}
message AddTagExtendedPropertiesRequest {
string strHandle = 1;
bytes btTeps = 2;
}
message AddTagExtendedPropertiesResponse {
.Status status = 1;
}
message DeleteTagExtendedPropertiesRequest {
string strHandle = 1;
bytes btInput = 2;
}
message DeleteTagExtendedPropertiesResponse {
.Status status = 1;
}
message DeleteTagsRequest {
uint32 uiHandle = 1;
bytes btTagnames = 2;
}
message DeleteTagsResponse {
.Status status = 1;
bytes btDeleteTagStatus = 2;
}
message AddTagLocalizedPropertiesRequest {
string strHandle = 1;
bytes btInput = 2;
}
message AddTagLocalizedPropertiesResponse {
.Status status = 1;
}
message DeleteTagLocalizedPropertiesRequest {
string strHandle = 1;
bytes btInput = 2;
}
message DeleteTagLocalizedPropertiesResponse {
.Status status = 1;
}
service HistoryService {
rpc GetInterfaceVersion (.GetInterfaceVersionRequest) returns (.GetInterfaceVersionResponse);
rpc ExchangeKey (.ExchangeKeyRequest) returns (.ExchangeKeyResponse);
rpc OpenConnection (.OpenConnectionRequest) returns (.OpenConnectionResponse);
rpc CloseConnection (.CloseConnectionRequest) returns (.CloseConnectionResponse);
rpc UpdateClientStatus (.UpdateClientStatusRequest) returns (.UpdateClientStatusResponse);
rpc RegisterTags (.RegisterTagsRequest) returns (.RegisterTagsResponse);
rpc EnsureTags (.EnsureTagsRequest) returns (.EnsureTagsResponse);
rpc AddStreamValues (.AddStreamValuesRequest) returns (.AddStreamValuesResponse);
rpc AddTagExtendedPropertyGroups (.AddTagExtendedPropertyRequest) returns (.AddTagExtendedPropertyResponse);
rpc AddTagExtendedProperties (.AddTagExtendedPropertiesRequest) returns (.AddTagExtendedPropertiesResponse);
rpc StartJob (.StartJobRequest) returns (.StartJobResponse);
rpc GetJobStatus (.GetJobStatusRequest) returns (.GetJobStatusResponse);
rpc DeleteTagExtendedProperties (.DeleteTagExtendedPropertiesRequest) returns (.DeleteTagExtendedPropertiesResponse);
rpc DeleteTags (.DeleteTagsRequest) returns (.DeleteTagsResponse);
rpc AddTagLocalizedProperties (.AddTagLocalizedPropertiesRequest) returns (.AddTagLocalizedPropertiesResponse);
rpc DeleteTagLocalizedProperties (.DeleteTagLocalizedPropertiesRequest) returns (.DeleteTagLocalizedPropertiesResponse);
}
@@ -0,0 +1,186 @@
// Recovered from RetrievalService.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.Retrieval";
message GetRetrievalInterfaceVersionRequest {
}
message GetRetrievalInterfaceVersionResponse {
uint32 uiError = 1;
uint32 uiVersion = 2;
}
message StartQueryRequest {
uint32 uiHandle = 1;
uint32 uiQueryRequestType = 2;
bytes btRequestBuffer = 3;
}
message StartQueryResponse {
.Status status = 1;
uint32 uiQueryHandle = 2;
bytes btResponseBuffer = 3;
}
message GetNextQueryResultBufferRequest {
uint32 uiHandle = 1;
uint32 uiQueryHandle = 2;
}
message GetNextQueryResultBufferResponse {
.Status status = 1;
bytes btQueryResult = 2;
}
message EndQueryRequest {
uint32 uiHandle = 1;
uint32 uiQueryHandle = 2;
}
message EndQueryResponse {
.Status status = 1;
}
message GetShardTagidsByTagnameAndSourceRequest {
string strHandle = 1;
bytes btTagnameAndSource = 2;
}
message GetShardTagidsByTagnameAndSourceResponse {
.Status status = 1;
bytes btShardTagids = 2;
}
message GetTagInfosFromNameRequest {
string strHandle = 1;
bytes btTagNames = 2;
uint32 uiSequence = 3;
}
message GetTagInfosFromNameResponse {
.Status status = 1;
bytes btTagInfos = 2;
uint32 uiSequence = 3;
}
message GetTagExtendedPropertiesFromNameRequest {
string strHandle = 1;
bytes btTagNames = 2;
uint32 uiSequence = 3;
}
message GetTagExtendedPropertiesFromNameResponse {
.Status status = 1;
bytes btTeps = 2;
uint32 uiSequence = 3;
}
message ExecuteSqlCommandRequest {
string strHandle = 1;
string StrCommand = 2;
uint32 uiOption = 3;
uint32 uiQueryHandle = 4;
}
message ExecuteSqlCommandResponse {
.Status status = 1;
int32 iRetValue = 2;
uint32 uiQueryHandle = 3;
}
message StartEventQueryRequest {
uint32 uiHandle = 1;
uint32 uiQueryRequestType = 2;
bytes btRequest = 3;
uint32 uiQueryHandle = 4;
}
message StartEventQueryResponse {
.Status status = 1;
uint32 uiQueryHandle = 2;
bytes btResonse = 3;
}
message GetNextEventQueryResultBufferRequest {
uint32 uiHandle = 1;
uint32 uiQueryHandle = 2;
}
message GetNextEventQueryResultBufferResponse {
.Status status = 1;
bytes btResult = 2;
}
message EndEventQueryRequest {
uint32 uiHandle = 1;
uint32 uiQueryHandle = 2;
}
message EndEventQueryResponse {
.Status status = 1;
}
message StartTagQueryRequest {
string strHandle = 1;
bytes btRequest = 2;
}
message StartTagQueryResponse {
.Status status = 1;
bytes btResponse = 2;
}
message QueryTagRequest {
string strHandle = 1;
uint32 uiQueryHandle = 2;
bytes btRequest = 3;
}
message QueryTagResponse {
.Status status = 1;
bytes btResonse = 2;
}
message EndTagQueryRequest {
string strHandle = 1;
uint32 uiQueryHandle = 2;
}
message EndTagQueryResponse {
.Status status = 1;
}
message GetTagLocalizedPropertiesFromNameRequest {
string strHandle = 1;
bytes btTagNames = 2;
uint32 uiSequence = 3;
}
message GetTagLocalizedPropertiesFromNameResponse {
.Status status = 1;
uint32 uiSequence = 2;
bytes btOutBuffer = 3;
}
service RetrievalService {
rpc GetRetrievalInterfaceVersion (.GetRetrievalInterfaceVersionRequest) returns (.GetRetrievalInterfaceVersionResponse);
rpc StartQuery (.StartQueryRequest) returns (.StartQueryResponse);
rpc GetNextQueryResultBuffer (.GetNextQueryResultBufferRequest) returns (.GetNextQueryResultBufferResponse);
rpc EndQuery (.EndQueryRequest) returns (.EndQueryResponse);
rpc GetShardTagidsByTagnameAndSource (.GetShardTagidsByTagnameAndSourceRequest) returns (.GetShardTagidsByTagnameAndSourceResponse);
rpc GetTagInfosFromName (.GetTagInfosFromNameRequest) returns (.GetTagInfosFromNameResponse);
rpc GetTagExtendedPropertiesFromName (.GetTagExtendedPropertiesFromNameRequest) returns (.GetTagExtendedPropertiesFromNameResponse);
rpc ExecuteSqlCommand (.ExecuteSqlCommandRequest) returns (.ExecuteSqlCommandResponse);
rpc StartEventQuery (.StartEventQueryRequest) returns (.StartEventQueryResponse);
rpc GetNextEventQueryResultBuffer (.GetNextEventQueryResultBufferRequest) returns (.GetNextEventQueryResultBufferResponse);
rpc EndEventQuery (.EndEventQueryRequest) returns (.EndEventQueryResponse);
rpc StartTagQuery (.StartTagQueryRequest) returns (.StartTagQueryResponse);
rpc QueryTag (.QueryTagRequest) returns (.QueryTagResponse);
rpc EndTagQuery (.EndTagQueryRequest) returns (.EndTagQueryResponse);
rpc GetTagLocalizedPropertiesFromName (.GetTagLocalizedPropertiesFromNameRequest) returns (.GetTagLocalizedPropertiesFromNameResponse);
}
@@ -0,0 +1,12 @@
// Recovered from Status.proto (AVEVA Historian SDK 2023 R2, Archestra.Grpc.Contract).
// Reconstructed from the embedded protobuf FileDescriptor; field numbers are authoritative.
syntax = "proto3";
option csharp_namespace = "ArchestrA.Grpc.Contract.RequestStatus";
message Status {
bool bSuccess = 1;
bytes btError = 2;
}
@@ -0,0 +1,215 @@
// Recovered from StatusService.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.Status";
message GetStatusInterfaceVersionRequest {
}
message GetStatusInterfaceVersionResponse {
uint32 uiError = 1;
uint32 uiVersion = 2;
}
message GetSystemParameterRequest {
uint32 uiHandle = 1;
string strParameterName = 2;
}
message GetSystemParameterResponse {
.Status status = 1;
string strParameterValue = 2;
}
message SendInfoRequest {
string strHandle = 1;
string strPipeName = 2;
uint32 uiOption = 3;
bytes btReqBuff = 4;
string strInfoID = 5;
}
message SendInfoResponse {
.Status status = 1;
string strInfoID = 2;
bytes btRespBuff = 3;
}
message RequestInfoRequest {
string strHandle = 1;
string strInfoID = 2;
uint32 uiOffset = 3;
}
message RequestInfoResponse {
.Status status = 1;
bytes btRespBuff = 2;
}
message DeleteInfoRequest {
string strHandle = 1;
string strInfoID = 2;
}
message DeleteInfoResponse {
.Status status = 1;
}
message GetHistorianInfoRequest {
string strHandle = 1;
bytes btRequest = 2;
}
message GetHistorianInfoResponse {
.Status status = 1;
bytes btHistorianInfo = 2;
}
message StartProcessRequest {
string strHandle = 1;
string strPipeName = 2;
string strPath = 3;
string strAuguments = 4;
uint32 uiKeepAliveInterval = 5;
uint32 uiKeepAliveMethod = 6;
}
message StartProcessResponse {
.Status status = 1;
}
message StopProcessRequest {
string strHandle = 1;
string StrPipeName = 2;
}
message StopProcessResponse {
.Status status = 1;
}
message PingServerRequest {
string strHandle = 1;
string strPipeName = 2;
uint32 uiTimeout = 3;
}
message PingServerResponse {
.Status status = 1;
}
message PingPipeRequest {
string strHandle = 1;
string strPipeName = 2;
}
message PingPipeResponse {
.Status status = 1;
}
message ConfigureAutoStartProcessRequest {
string strHandle = 1;
string strPipeName = 2;
string strPath = 3;
string strAuguments = 4;
uint32 uiKeepAliveInterval = 5;
uint32 uiKeepAliveMethod = 6;
uint32 uiStartupFlags = 7;
}
message ConfigureAutoStartProcessResponse {
.Status status = 1;
}
message GetHistorianConsoleStatusRequest {
string strHandle = 1;
}
message GetHistorianConsoleStatusResponse {
.Status status = 1;
uint32 uiConsoleStatus = 2;
}
message GetRuntimeParameterRequest {
string strHandle = 1;
bytes btRequest = 2;
}
message GetRuntimeParameterResponse {
.Status status = 1;
bytes btResponse = 2;
}
message GetSystemTimeZoneNameRequest {
uint32 uiHandle = 1;
}
message GetSystemTimeZoneNameResponse {
.Status status = 1;
string strSystemTimeZoneName = 2;
}
message SetHistorianConsoleStatusRequest {
string strHandle = 1;
uint32 uiStatus = 2;
uint32 uiOption = 3;
}
message SetHistorianConsoleStatusResponse {
.Status status = 1;
}
message CanUpdateAreaHierarchyRequest {
uint32 uiHandle = 1;
}
message CanUpdateAreaHierarchyResponse {
.Status status = 1;
bool canUpdate = 2;
}
message UpdateAreaHierarchyRequest {
uint32 uiHandle = 1;
string guid = 2;
uint32 sequence = 3;
bytes buffer = 4;
}
message UpdateAreaHierarchyResponse {
.Status status = 1;
}
message UpdateObjectHierarchyRequest {
uint32 uiHandle = 1;
string guid = 2;
uint32 sequence = 3;
bytes buffer = 4;
}
message UpdateObjectHierarchyResponse {
.Status status = 1;
}
service StatusService {
rpc GetStatusInterfaceVersion (.GetStatusInterfaceVersionRequest) returns (.GetStatusInterfaceVersionResponse);
rpc GetSystemParameter (.GetSystemParameterRequest) returns (.GetSystemParameterResponse);
rpc SendInfo (.SendInfoRequest) returns (.SendInfoResponse);
rpc RequestInfo (.RequestInfoRequest) returns (.RequestInfoResponse);
rpc DeleteInfo (.DeleteInfoRequest) returns (.DeleteInfoResponse);
rpc GetHistorianInfo (.GetHistorianInfoRequest) returns (.GetHistorianInfoResponse);
rpc StartProcess (.StartProcessRequest) returns (.StartProcessResponse);
rpc StopProcess (.StopProcessRequest) returns (.StopProcessResponse);
rpc PingServer (.PingServerRequest) returns (.PingServerResponse);
rpc PingPipe (.PingPipeRequest) returns (.PingPipeResponse);
rpc ConfigureAutoStartProcess (.ConfigureAutoStartProcessRequest) returns (.ConfigureAutoStartProcessResponse);
rpc GetHistorianConsoleStatus (.GetHistorianConsoleStatusRequest) returns (.GetHistorianConsoleStatusResponse);
rpc GetRuntimeParameter (.GetRuntimeParameterRequest) returns (.GetRuntimeParameterResponse);
rpc GetSystemTimeZoneName (.GetSystemTimeZoneNameRequest) returns (.GetSystemTimeZoneNameResponse);
rpc SetHistorianConsoleStatus (.SetHistorianConsoleStatusRequest) returns (.SetHistorianConsoleStatusResponse);
rpc CanUpdateAreaHierarchy (.CanUpdateAreaHierarchyRequest) returns (.CanUpdateAreaHierarchyResponse);
rpc UpdateAreaHierarchy (.UpdateAreaHierarchyRequest) returns (.UpdateAreaHierarchyResponse);
rpc UpdateObjectHierarchy (.UpdateObjectHierarchyRequest) returns (.UpdateObjectHierarchyResponse);
}
@@ -0,0 +1,417 @@
// 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);
}
@@ -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);
}