У меня есть серверное приложение 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
В чем здесь проблема?