Exemplo n.º 1
0
        private async Task SendHeartbeatAsync(Context context)
        {
            StructResult <int> sessionResult = await _sessionState.GetIdAsync();

            if (!sessionResult.Succeeded)
            {
                // We do not even attempt to send a heartbeat if we can't get a session ID.
                return;
            }

            int sessionId = sessionResult.Data;

            try
            {
                HeartbeatResponse response = await _client.HeartbeatAsync(new HeartbeatRequest { Header = new RequestHeader(context.Id, sessionId) });

                // Check for null header here as a workaround to a known service bug, which returns null headers on successful heartbeats.
                if (response?.Header != null && !response.Header.Succeeded)
                {
                    _tracer.Warning(
                        context,
                        $"Heartbeat failed: ErrorMessage=[{response.Header.ErrorMessage}] Diagnostics=[{response.Header.Diagnostics}]");

                    // Nor do we attempt to reset a session ID based on a failed heartbeat.
                }
            }
            catch (Exception ex)
            {
                string message = (ex is RpcException rpcEx) && (rpcEx.Status.StatusCode == StatusCode.Unavailable)
                    ? "Heartbeat failed to detect running service."
                    : $"Heartbeat failed: [{ex}]";
                _tracer.Debug(context, message);
            }
        }
Exemplo n.º 2
0
 /// <inheritdoc />
 protected override AsyncUnaryCall <HeartbeatResponse> HeartbeatAsync(HeartbeatRequest heartbeatRequest)
 {
     return(_client.HeartbeatAsync(heartbeatRequest));
 }
Exemplo n.º 3
0
 /// <inheritdoc />
 protected override AsyncUnaryCall <HeartbeatResponse> HeartbeatAsync(HeartbeatRequest heartbeatRequest, CancellationToken token)
 {
     return(Client.HeartbeatAsync(heartbeatRequest, cancellationToken: token));
 }