首页 > 解决方案 > GraphQL .NET FieldResolver 在每个异步 http 请求上都失败

问题描述

我已经使用 NuGets GraphQL for .NET 4.6.0设置了一个ASP.CORE 5应用程序。在这种情况下,我添加了一个带有一个 ListGraphType 字段的查询,该字段将返回汽车物品列表。我也喜欢在这一点上使用数据加载器和 httpRequests 到我的外部 api。

所以我像这样设置我的查询:

public CarQuery(IDataLoaderContextAccessor accessor, ICarStore carStore)
    {

        Field<ListGraphType<CarItemType>, List<CarItem>>()
        .Name("MyItems")
        .Description("A type that returns a complex data")
        .ResolveAsync( context =>
       {
           var loader = accessor.Context.GetOrAddLoader<List<CarItem>>("GetMyItems", carStore.ReadCarItemsAsync);
            
           return loader.LoadAsync();
       });
    }

ReadCarItemAsync 返回一个包含这样的汽车的列表:

public async Task<List<CarItem>> ReadCarItemsAsync()
    {
        var carList = new List<CarItem>();
        var client = _clientFactory.CreateClient("gcRedisHttpClient");
        var request = new HttpRequestMessage(HttpMethod.Get,
        "cars/?num=1&len=20&digits=on&upperalpha=on&loweralpha=on&unique=on&format=html&rnd=new&format=plain");

        var response = await client.SendAsync(request);

        if (response.IsSuccessStatusCode)
        {
            using (var responseStream = await response.Content.ReadAsStreamAsync())
            {
              carList = await JsonSerializer.DeserializeAsync<List<CarItem>>(responseStream);
            }
        }
        else
        {
            carList = new List<CarItem>();
        }

        return carList;
    }

ResolveAsync() 获取一个列表或一个空列表。但最终解析器以这样的异常结束:

System.OperationCanceledException: The operation was canceled.
    at System.Threading.CancellationToken.ThrowOperationCanceledException()
    at GraphQL.Execution.ParallelExecutionStrategy.ExecuteNodeTreeAsync(ExecutionContext context, ExecutionNode rootNode) in /_/src/GraphQL/Execution/ParallelExecutionStrategy.cs:line 48
    at GraphQL.Execution.ExecutionStrategy.ExecuteAsync(ExecutionContext context) in /_/src/GraphQL/Execution/ExecutionStrategy.cs:line 28    at GraphQL.DocumentExecuter.ExecuteAsync(ExecutionOptions options) in /_/src/GraphQL/Execution/DocumentExecuter.cs:line 212
    at GraphQL.Server.DefaultGraphQLExecuter`1.ExecuteAsync(String operationName, String query, Inputs variables, IDictionary`2 context, IServiceProvider requestServices, CancellationToken cancellationToken) in /_/src/Core/DefaultGraphQLExecuter.cs:line 44
    at GraphQL.Server.Transports.AspNetCore.GraphQLHttpMiddleware`1.InvokeAsync(HttpContext context) in /_/src/Transports.AspNetCore/GraphQLHttpMiddleware.cs:line 138
    at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
    at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

我不明白为什么我的解析器以异常结束。httpWeb 请求运行良好。还有反序列化任务。我认为例外是关于线程问题,但我不知道为什么以及如何。

有谁知道我该如何解决这个问题?

标签: multithreadinggraphqlhttpwebrequest

解决方案


推荐阅读