GraphQL DotNet 中的 SubscriptionDocumentExecutor

SubscriptionDocumentExecutor in GraphQL DotNet

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

但是,我目前在通过 UI 游乐场向 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 自述文件指出:

For handling subscriptions you'll need an instance of DocumentExecuter that supports this GraphQL operation type. DocumentExecuter class from the main GraphQL.NET package supports only queries and mutations. We provide SubscriptionDocumentExecuter implementation on top of System.Reactive packages.

我已经仔细研究了源代码,我知道为什么会发生此错误,但我不确定 where/how 是否可以使用来自GraphQL.SystemReactive 包如 Github 页面所述?我在哪里配置这些选项?

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

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

services.AddSingleton<IDocumentExecuter, SubscriptionDocumentExecuter>();

到您的 StartUp class。

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