首页 > 解决方案 > GraphQL DotNet 中的 SubscriptionDocumentExecutor

问题描述

我正在使用 GraphQL for .NET 和 GraphQL for .NET - Subscription Transport WebSockets 包构建一个新的 GraphQL API,并且我正在尝试测试我在架构中设置的一些订阅。

但是,当通过 UI Playground 向 API 发送订阅请求时,我目前收到此错误:

"GraphQL.Execution.UnhandledError: Error executing document.
---> System.NotSupportedException: DocumentExecuter does not support executing subscriptions. You can use SubscriptionDocumentExecuter from GraphQL.SystemReactive package to handle subscriptions.
   at GraphQL.DocumentExecuter.SelectExecutionStrategy(ExecutionContext context) in /_/src/GraphQL/Execution/DocumentExecuter.cs:line 304
   at GraphQL.DocumentExecuter.BuildExecutionContext(ExecutionOptions options, Document document, Operation operation, Variables variables, Metrics metrics) in /_/src/GraphQL/Execution/DocumentExecuter.cs:line 270
   at GraphQL.DocumentExecuter.ExecuteAsync(ExecutionOptions options) in /_/src/GraphQL/Execution/DocumentExecuter.cs:line 142
   --- End of inner exception stack trace ---"

Github 自述文件指出:

为了处理订阅,您需要一个支持此 GraphQL 操作类型的 DocumentExecuter 实例。GraphQL.NET 主包中的 DocumentExecuter 类仅支持查询和突变。我们在 System.Reactive 包之上提供 SubscriptionDocumentExecuter 实现。

我已经挖掘了源代码,我知道为什么会发生这个错误,但我不确定在哪里/如何用 Github 页面提到的包中的包覆盖DocumentExecutor默认值SubscriptionDocumentExecutorGraphQL.SystemReactive我在哪里配置这些选项?

标签: .netgraphqlgraphql-subscriptionsgraphql-dotnet

解决方案


我认为您正在 C# 端构建 Graphql 服务器。

从版本 4.1.0 (GraphQL) 开始,您需要覆盖默认 DocumentExecutor 以使用订阅。这样做的方法是简单地添加

services.AddSingleton<IDocumentExecuter, SubscriptionDocumentExecuter>();

到你的 StartUp 课程。

而且您不需要从 nuget 安装GraphQL.SystemReactive。服务器包GraphQL.Server.Transports.Subscriptions.WebSockets已经有了。


推荐阅读