Сайт застрял на экране загрузки для асин c вызова - PullRequest
2 голосов
/ 03 февраля 2020

У меня есть серверное приложение Blazor на стороне сервера с asyn c RestSharp RestRequest. Я использую экран загрузки во время запроса, который работает нормально и без каких-либо проблем на моем локальном компьютере, но в онлайн-приложении он иногда застревает при загрузке, когда я делаю один и тот же запрос несколько раз. Я не знаю, в чем здесь проблема.

Вот код:

private async Task MakeRequest(ChangeEventArgs e)
{
    if (e.Value != null)
    {
        AppState.IsBusy = true;

        List.Clear();

        foreach (var type in GetTypes())
        {
            var (result, error) = await Utility.GetDataAsync(e.Value, type);
            if (error.HasValue)
            {
                AppState.ErrorShow = true;
                break;
            }
            else
            {
                List.AddRange(result);
            }
        }

        AppState.IsBusy = false;
    }
}

AppState - это служба с областью действия, которая хранит состояние приложения. Если IsBusy изменяется, я звоню NotifyStateChanged(), что вызывает StateHasChanged() на моей странице. Utility.GetDataAsync() - это метод, который создает RestRequest и анализирует результат:

public static async Task<(List<string>, Error?)> GetModelle(string buildYear, string brand, string type)
{
    Error? error = null;

    var client = new RestClient("");
    var request = new RestRequest("", Method.GET);
    var response = await client.ExecuteAsync(request);

    using (JsonDocument document = JsonDocument.Parse(response.Content))
    {
        try
        {
            .. parse result ...
        }
        catch (Exception ex)
        {
            error = new Error();
        }
    }

    return (list, error);
}

Код для экрана загрузки на моей странице выглядит так:

@if (AppState.IsBusy)
{
    <div class="overlay">
        <div id="floatingCirclesG">
            <div class="f_circleG" id="frotateG_01"></div>
            <div class="f_circleG" id="frotateG_02"></div>
            <div class="f_circleG" id="frotateG_03"></div>
            <div class="f_circleG" id="frotateG_04"></div>
            <div class="f_circleG" id="frotateG_05"></div>
            <div class="f_circleG" id="frotateG_06"></div>
            <div class="f_circleG" id="frotateG_07"></div>
            <div class="f_circleG" id="frotateG_08"></div>
        </div>
    </div>
}

edit : я использовал Application Insights, чтобы отследить его. Проблема в том, что я иногда получаю HttpRequestException с сообщением Received an invalid status code: 'Con', и, следовательно, в ответе нет содержимого, что приводит к JsonDocument.Parse(response.Content) выдаче исключения.

Хотя я знаю это сейчас, я могу ' Я ничего не могу с этим поделать, потому что даже если я проверю это и вернусь из метода, я больше не смогу отправить правильный запрос, даже если я вызову метод совершенно новый с другими параметрами. Я всегда получаю одно и то же HttpRequestException с одним и тем же сообщением. Я не знаю, почему это происходит. Локально вызов ВСЕГДА работает как с клиентом REST, так и с моим приложением.

Исключение, которое я получаю, когда возникает проблема, это следующее

Time    6:35:28 PM
Exception type  System.Net.Http.HttpRequestException
Exception message   Received an invalid status code: 'Con'.
AspNetCoreEnvironment   Production
System.Net.Http.HttpRequestException: Received an invalid status code: 'Con'.
   at System.Net.Http.HttpConnection.ParseStatusLine(Span`1 line, HttpResponseMessage response)
   at System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.DecompressionHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

, за которым следует

Time    6:35:28 PM
Duration    2.24 sec
Outgoing Command    GET /commons-dispatcher/services/eurotax/domain
Result code Faulted
AspNetCoreEnvironment   Production
Error   Received an invalid status code: 'Con'.
_MS.ProcessedByMetricExtractors (Name:'Dependencies', Ver:'1.1')
#########/commons-dispatcher/services/eurotax/domain?&domainType=vehicleBrand&buildYear=2011&propertyType=KFZP10

В чем здесь проблема?

...