.net - 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
默认值SubscriptionDocumentExecutor
?GraphQL.SystemReactive
我在哪里配置这些选项?
解决方案
我认为您正在 C# 端构建 Graphql 服务器。
从版本 4.1.0 (GraphQL) 开始,您需要覆盖默认 DocumentExecutor 以使用订阅。这样做的方法是简单地添加
services.AddSingleton<IDocumentExecuter, SubscriptionDocumentExecuter>();
到你的 StartUp 课程。
而且您不需要从 nuget 安装GraphQL.SystemReactive。服务器包GraphQL.Server.Transports.Subscriptions.WebSockets已经有了。
推荐阅读
- r - 拆分和重命名R中数据框中的重复列
- c# - 连接 ReadOnlySpan
- python - 将 jupyter 笔记本保存为 PDF 时,如何保留 pandas DataFrames 的样式背景颜色?
- github - 如何在 Bitbucket 和 github markdown 中显示数学表达式?
- java - 微服务中的观察者模式
- android - 存在绝对链接时,Jsoup connect 无法正常工作?
- javascript - 从 data.task 迁移到处理拒绝的民间故事
- web - 如何在 Adsense 中实施非个性化广告?
- javascript - NodeJS - 从请求标头全局存储值
- python - Python - 如何使用 asyncio 使任务异步运行