1

我正在使用 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我在哪里配置这些选项?

4

1 回答 1

3

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

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

services.AddSingleton<IDocumentExecuter, SubscriptionDocumentExecuter>();

到你的 StartUp 课程。

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

于 2021-07-05T10:32:22.137 回答