订阅热巧克力“RESULT_TYPE_NOT_SUPPORTED”

Posted

技术标签:

【中文标题】订阅热巧克力“RESULT_TYPE_NOT_SUPPORTED”【英文标题】:Hot Chocolate "RESULT_TYPE_NOT_SUPPORTED" on subscription 【发布时间】:2020-12-22 22:12:38 【问题描述】:

编辑 00: 注意: 此消息来自 GraphiQL 界面。当我在“Banana Cake Pop”用户界面中尝试相同的查询时,执行此查询时没有返回任何消息。


在尝试使用 Hot Chocolate 在 ASP.NET Web 服务器上创建 GraphQL 订阅时,代码与 this tutorial 中的代码完全相同,我收到了来自服务器的错误反馈。

错误信息


  "errors": [
    
      "message": "Result type not supported.",
      "extensions": 
        "code": "RESULT_TYPE_NOT_SUPPORTED"
      
    
  ]

我试图准确地重新创建教程,但它不起作用。我也无法从these examples 获得任何示例。不过,它仅适用于订阅,查询和突变都可以正常工作。

服务配置

public void ConfigureServices(IServiceCollection services)

    services.AddRazorPages();

    // [GRAPHQL]
    services.AddInMemorySubscriptionProvider();

    services.AddGraphQL(SchemaBuilder.New()
        .AddQueryType<ShuttleQuery>()
        .AddMutationType<ShuttleMutation>()
        .AddType<Subscription>()
        .BindClrType<string, StringType>()
        .Create()
    );

应用程序配置

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    
    else
    
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    

    app.UseStaticFiles();

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    
        endpoints.MapRazorPages();
        endpoints.MapControllers();
    );


    // [GRAPHQL]
    app.UseWebSockets().UseGraphQL("/graphql");
    app.UseGraphQL("/graphql");

基于教程的通用订阅类型

public class Subscription
            

    [SubscribeAndResolve]
    public async IAsyncEnumerable<string> OnMessageAsync()
    
        yield return "Hey!";
        await Task.Delay(2000);
        yield return "It Changed?";
        await Task.Delay(2500);
        yield return "It Never Changes Because It Doesn't W";
    

我已经坚持了几天了,任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

问题主题错误消息仅在 GraphiQL 中显示

TL;DR: 我通过使用 .Net Core 3.0 控制台应用程序而不是 ASP.NET Web 应用程序项目类型解决了这个问题。

尽管 GraphiQL 是唯一返回上述消息的编辑器,但无论您如何尝试使用订阅,问题仍然存在。它只是缺少其他编辑器中的错误消息。

一定有某种我不知道的背景配置(我对 C#/.NET 还很陌生)。我在 .NET Core 控制台应用程序和 ASP.NET Web 应用程序中运行示例星球大战项目文件。他们有相同的文件、正确的名称间距、成功的构建、变异和查询在两个项目中都有效

但只有控制台项目允许订阅。

除了将根项目作为 .NET Core 3.0 控制台应用程序启动之外,我真的不知道如何解决此问题,如果其他人知道我希望更好地了解此问题的真正含义。

【讨论】:

【参考方案2】:

我在尝试从代码调用订阅时遇到了同样的错误(FE: react, BE: .net core)。问题是我通过http调用订阅......订阅通过WebSocket工作。 因此,请检查您的应用程序是否通过 WEBSocket 调用订阅。 在这里您可以看到如何配置客户端在 http 和 ws 之间拆分请求:https://github.com/howtographql/react-apollo/blob/master/src/index.js

【讨论】:

我会接受这个答案,但我还没有测试它是否可以工作,因为我们从 GraphQL 迁移并使用了 signalR,因为它更清楚地记录了更多可用的工作示例.不过还是谢谢!

以上是关于订阅热巧克力“RESULT_TYPE_NOT_SUPPORTED”的主要内容,如果未能解决你的问题,请参考以下文章

热巧克力 v11 中的 DataLoaderOptions.AutoDispatch

如何使用 GraphQL 突变进行更新(热巧克力)

83.『Ruby美食』自制巧克力淋酱(homemade chocolate sauce)

ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)

在页面热模块替换期间创建新的 RxJS 订阅

星巴克不使用两阶段提交