Горячий шоколад RESULT_TYPE_NOT_SUPPORTED по подписке

edit 00: ПРИМЕЧАНИЕ. Это сообщение приходит из интерфейса GraphiQL. Когда я попробовал тот же запрос в пользовательском интерфейсе «Banana Cake Pop», при выполнении этого запроса не было получено никакого сообщения.


При попытке создать подписку GraphQL на веб-сервере ASP.NET с помощью Hot Chocolate с точно таким же кодом, который находится в это руководство, я получаю сообщение об ошибке с сервера.

Сообщение об ошибке

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

Я попытался точно воссоздать учебник, но он не работает. Я также не могу получить какой-либо из примеров, работающих с эти примеры. Но только с подписками, запросы и изменения работают отлично.

Конфигурация служб

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";
    }
}

Я застрял на этом уже несколько дней, любая помощь будет принята с благодарностью.


person aptlyundecided    schedule 03.09.2020    source источник


Ответы (2)


У меня была такая же ошибка при попытке вызвать подписку из кода (FE: реагировать, BE: .net core). И пробелм было, что я звоню по подписке через http ... Подписка работает через WebSocket. Поэтому проверьте, есть ли у вас приложение для подписки на вызов через WEbSocket. Здесь вы можете увидеть, как настроить клиент для разделения запроса между http и ws: https://github.com/howtographql/react-apollo/blob/master/src/index.js

person driver    schedule 27.10.2020
comment
Я собираюсь принять этот ответ, но я не тестировал его, чтобы увидеть, работает ли он, поскольку мы перешли с GraphQL и использовали signalR, поскольку он был более четко документирован с большим количеством доступных рабочих примеров. В любом случае спасибо! - person aptlyundecided; 27.10.2020

Сообщение об ошибке в теме вопроса отображается только в GraphiQL

TL; DR: Я решил эту проблему, используя консольное приложение .Net Core 3.0 вместо типа проекта веб-приложения ASP.NET.

Несмотря на то, что GraphiQL - единственный редактор, который возвращает указанное выше сообщение, проблема остается независимо от того, как вы пытаетесь использовать подписку. В других редакторах просто отсутствует сообщение об ошибке.

Должна быть какая-то фоновая конфигурация, о которой я не знаю (я новичок в C # /. NET). Я запускал примеры файлов проекта звездных войн в консольном приложении .NET Core и веб-приложении ASP.NET. У них были одинаковые файлы, правильный интервал между именами, успешная сборка, изменения и запросы, работающие в обоих проектах.

Но подписки разрешены только в консольном проекте.

Я действительно не знаю, как решить эту проблему, кроме как запустить ваш корневой проект как консольное приложение .NET Core 3.0, если кто-то еще узнает, что я хотел бы лучше понять, в чем эта проблема на самом деле.

person aptlyundecided    schedule 04.09.2020