public async Task <StatusCode> LongrunningPassthroughAsync(string recipientId, string passthroughName, byte[]?dataToSend,
                                                                   Action <Ssz.Utils.DataAccess.LongrunningPassthroughCallback>?callbackAction)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Cannot access a disposed Context.");
            }

            if (!ServerContextIsOperational)
            {
                throw new InvalidOperationException();
            }

            string invokeId = Guid.NewGuid().ToString();

            try
            {
                var incompleteLongrunningPassthroughRequest = new IncompleteLongrunningPassthroughRequest
                {
                    CallbackAction = callbackAction
                };
                lock (_incompleteLongrunningPassthroughRequestsCollection)
                {
                    _incompleteLongrunningPassthroughRequestsCollection.Add(invokeId, incompleteLongrunningPassthroughRequest);
                }

                var passthroughDataToSendFull = new PassthroughData();
                if (dataToSend is not null)
                {
                    passthroughDataToSendFull.Data = ByteString.CopyFrom(dataToSend);
                }
                foreach (var passthroughDataToSend in passthroughDataToSendFull.SplitForCorrectGrpcMessageSize())
                {
                    var request = new LongrunningPassthroughRequest
                    {
                        InvokeId        = invokeId,
                        ContextId       = _serverContextId,
                        RecipientId     = recipientId,
                        PassthroughName = passthroughName,
                        DataToSend      = passthroughDataToSend
                    };

                    LongrunningPassthroughReply reply = await _resourceManagementClient.LongrunningPassthroughAsync(request);

                    SetResourceManagementLastCallUtc();
                }

                return(await incompleteLongrunningPassthroughRequest.TaskCompletionSource.Task);
            }
            catch (Exception ex)
            {
                lock (_incompleteLongrunningPassthroughRequestsCollection)
                {
                    _incompleteLongrunningPassthroughRequestsCollection.Remove(invokeId);
                }
                ProcessRemoteMethodCallException(ex);
                throw;
            }
        }
        public void Passthrough(string recipientId, string passthroughName, byte[] dataToSend, out IEnumerable <byte> returnData)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException("Cannot access a disposed Context.");
            }

            if (!ServerContextIsOperational)
            {
                throw new InvalidOperationException();
            }

            try
            {
                var passthroughDataToSendFull = new PassthroughData();
                passthroughDataToSendFull.Data = ByteString.CopyFrom(dataToSend);
                returnData = new byte[0];
                foreach (var passthroughDataToSend in passthroughDataToSendFull.SplitForCorrectGrpcMessageSize())
                {
                    var request = new PassthroughRequest
                    {
                        ContextId       = _serverContextId,
                        RecipientId     = recipientId,
                        PassthroughName = passthroughName,
                        DataToSend      = passthroughDataToSend
                    };
                    while (true)
                    {
                        PassthroughReply reply = _resourceManagementClient.Passthrough(request);
                        request.DataToSend = new PassthroughData();
                        SetResourceManagementLastCallUtc();
                        IEnumerable <byte>?returnDataTemp = null;
                        if (!String.IsNullOrEmpty(reply.ReturnData.Guid) && _incompletePassthroughRepliesCollection.Count > 0)
                        {
                            var beginPassthroughReply = _incompletePassthroughRepliesCollection.TryGetValue(reply.ReturnData.Guid);
                            if (beginPassthroughReply is not null)
                            {
                                _incompletePassthroughRepliesCollection.Remove(reply.ReturnData.Guid);
                                returnDataTemp = beginPassthroughReply.Concat(reply.ReturnData.Data);
                            }
                        }
                        if (returnDataTemp is null)
                        {
                            returnDataTemp = reply.ReturnData.Data;
                        }

                        if (!String.IsNullOrEmpty(reply.ReturnData.NextGuid))
                        {
                            _incompletePassthroughRepliesCollection[reply.ReturnData.NextGuid] = returnDataTemp;

                            request = new PassthroughRequest
                            {
                                ContextId = _serverContextId
                            };

                            continue;
                        }

                        returnData = returnDataTemp;
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                ProcessRemoteMethodCallException(ex);
                throw;
            }
        }