Парсер GraphQL json и AllowSynchronousIO
Я начинаю внедрять GraphQA в.NET с https://github.com/graphql-dotnet/server, я написал очень простой пример приложения, и при запуске Graphiql я получил следующую ошибку:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpRequestStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.StreamReader.ReadBuffer(Span`1 userBuffer, Boolean& readToUserBuffer)
at System.IO.StreamReader.ReadSpan(Span`1 buffer)
at System.IO.StreamReader.Read(Char[] buffer, Int32 index, Int32 count)
at Newtonsoft.Json.JsonTextReader.ReadData(Boolean append, Int32 charsRequired)
at Newtonsoft.Json.JsonTextReader.ParseValue()
at Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize[T](JsonReader reader)
at GraphQL.Server.Transports.AspNetCore.GraphQLHttpMiddleware`1.Deserialize[T](Stream s)
at GraphQL.Server.Transports.AspNetCore.GraphQLHttpMiddleware`1.InvokeAsync(HttpContext context)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.InvokeCore(HttpContext context, ICorsPolicyProvider corsPolicyProvider)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
Я нашел здесь обходной путь https://github.com/graphql-dotnet/graphql-dotnet/issues/1116 котором говорится, что конфигурация для IIS/Krestel должна разрешать синхронный ввод-вывод, используя следующее:
services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
Я вижу, что https://www.nuget.org/packages/GraphQL.Server.Transports.AspNetCore.NewtonsoftJson все еще находится в альфа-версии, поэтому я предполагаю, что мне нужно использовать сборку в парсере JSON.NET Core 3.1.
Каковы последствия установки AllowSynchronousIO
сделает ли это вызовы, которые сервер может обрабатывать медленнее?