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); } }
/// <inheritdoc /> protected override AsyncUnaryCall <HeartbeatResponse> HeartbeatAsync(HeartbeatRequest heartbeatRequest) { return(_client.HeartbeatAsync(heartbeatRequest)); }
/// <inheritdoc /> protected override AsyncUnaryCall <HeartbeatResponse> HeartbeatAsync(HeartbeatRequest heartbeatRequest, CancellationToken token) { return(Client.HeartbeatAsync(heartbeatRequest, cancellationToken: token)); }