示例#1
0
        /// <summary>
        /// Creates a new <see cref="HttpMessage"/> instance.
        /// </summary>
        /// <param name="context">Context specifying the message options.</param>
        /// <param name="classifier"></param>
        /// <returns>The message.</returns>
        public HttpMessage CreateMessage(RequestContext?context, CoreResponseClassifier?classifier = default)
        {
            var message = CreateMessage();

            message.ApplyRequestContext(context, classifier);
            return(message);
        }
示例#2
0
            public async Task CallbackAsync(RequestContext?context, CancellationToken cancellationToken)
            {
                // Restore our activity id so that logging/tracking works.
                Trace.CorrelationManager.ActivityId = ActivityId;
                _logger.TraceStart($"{MethodName} - Roslyn");
                try
                {
                    await _callbackAsync(context, cancellationToken).ConfigureAwait(false);

                    this.Metrics.RecordSuccess();
                }
                catch (OperationCanceledException)
                {
                    _logger.TraceInformation($"{MethodName} - Canceled");
                    this.Metrics.RecordCancellation();
                    throw;
                }
                catch (Exception ex)
                {
                    _logger.TraceException(ex);
                    this.Metrics.RecordFailure();
                    throw;
                }
                finally
                {
                    _logger.TraceStop($"{MethodName} - Roslyn");
                }
            }
示例#3
0
        /// <summary>
        /// Creates a new <see cref="HttpMessage"/> instance.
        /// </summary>
        /// <param name="context">Context specifying the message options.</param>
        /// <returns>The message.</returns>
        public HttpMessage CreateMessage(RequestContext?context)
        {
            var message = CreateMessage();

            message.AddPolicies(context);
            return(message);
        }
            public async Task CallbackAsync(RequestContext?context, CancellationToken cancellationToken)
            {
                // Restore our activity id so that logging/tracking works.
                Trace.CorrelationManager.ActivityId = ActivityId;
                _logger.TraceStart($"{MethodName} - Roslyn");
                try
                {
                    cancellationToken.ThrowIfCancellationRequested();

                    TResponseType?result;
                    if (context == null)
                    {
                        // If we weren't able to get a corresponding context for this request (for example, we
                        // couldn't map a doc request to a particular Document, or we couldn't find an appropriate
                        // Workspace for a global operation), then just immediately complete the request with a
                        // 'null' response.  Note: the lsp spec was checked to ensure that 'null' is valid for all
                        // the requests this could happen for.  However, this assumption may not hold in the future.
                        // If that turns out to be the case, we could defer to the individual handler to decide
                        // what to do.
                        _logger.TraceWarning($"Could not get request context for {MethodName}");
                        this.Metrics.RecordFailure();
                        result = default;
                    }
                    else
                    {
                        result = await _handler.HandleRequestAsync(_request, context.Value, cancellationToken).ConfigureAwait(false);

                        this.Metrics.RecordSuccess();
                    }

                    _completionSource.TrySetResult(result);
                }
                catch (OperationCanceledException ex)
                {
                    // Record logs + metrics on cancellation.
                    _logger.TraceInformation($"{MethodName} - Canceled");
                    this.Metrics.RecordCancellation();

                    _completionSource.TrySetCanceled(ex.CancellationToken);
                }
                catch (Exception ex)
                {
                    // Record logs and metrics on the exception.
                    _logger.TraceException(ex);
                    this.Metrics.RecordFailure();

                    _completionSource.TrySetException(ex);
                }
                finally
                {
                    _logger.TraceStop($"{MethodName} - Roslyn");
                }

                // Return the result of this completion source to the caller
                // so it can decide how to handle the result / exception.
                await _completionSource.Task.ConfigureAwait(false);
            }
        /// <summary>
        /// Creates a new <see cref="HttpMessage"/> instance.
        /// </summary>
        /// <param name="context">Context specifying the message options.</param>
        /// <param name="classifier"></param>
        /// <returns>The message.</returns>
        public HttpMessage CreateMessage(RequestContext?context, ResponseClassifier?classifier = default)
        {
            var message = CreateMessage();

            if (classifier != null)
            {
                message.ResponseClassifier = classifier;
            }
            message.ApplyRequestContext(context, classifier);
            return(message);
        }
示例#6
0
    public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
    {
        _scheme         = scheme;
        _requestContext = context.Features.Get <RequestContext>();

        if (_requestContext == null)
        {
            throw new InvalidOperationException("No RequestContext found.");
        }

        return(Task.CompletedTask);
    }
示例#7
0
 public static Uri?TryGetURI(this TextDocument document, RequestContext?context = null)
 => ProtocolConversions.TryGetUriFromFilePath(document.FilePath, context);
示例#8
0
 /// <summary>
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public HttpMessage CreateMessage(RequestContext?context) => CreateMessage(context, default);