You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中GraphQL订阅如何切换为SubscriptionDocumentExecuter解决报错

问题修复方案

报错原因是默认的DocumentExecuter不支持订阅操作,即使配置了正确的执行策略也需要替换为GraphQL.SystemReactive包提供的SubscriptionDocumentExecuter才能生效,按照以下步骤操作即可:


步骤1:替换默认的文档执行器

在ASP.NET Core服务注册代码(.NET 6+为Program.cs,旧版本为Startup.cs的ConfigureServices方法)中添加IDocumentExecuter的实现注册,覆盖默认实现:

// 必须为单例注册
builder.Services.AddSingleton<IDocumentExecuter, SubscriptionDocumentExecuter>();

步骤2:启用GraphQL订阅与WebSocket支持

注册GraphQL服务时补充订阅和WebSocket相关配置:

builder.Services.AddGraphQL(b => b
    .AddSchema<DragonSchema>()
    .AddSystemTextJson() // 若使用Newtonsoft.Json则替换为.AddNewtonsoftJson()
    .AddSubscriptionSupport() // 启用订阅核心能力
    .AddWebSockets() // 注册WebSocket传输协议
);

步骤3:调整中间件注册顺序

中间件配置顺序必须严格遵循以下规则,先启用WebSocket中间件,再注册GraphQL对应处理:

var app = builder.Build();

// CORS、静态文件等其他中间件放在这之前
app.UseWebSockets();
// 先注册GraphQL WebSocket处理中间件
app.UseGraphQLWebSockets<DragonSchema>("/graphql");
// 再注册普通GraphQL处理中间件
app.UseGraphQL<DragonSchema>("/graphql");
// 最后注册Playground
app.UseGraphQLPlayground(options => {
    // 可选:显式指定Playground订阅端点,默认已开启可省略
    options.SubscriptionEndpoint = "/graphql";
});

步骤4:保留现有执行策略配置

你当前编写的SelectExecutionStrategy方法逻辑正确,不需要修改,继续保留即可。
额外注意:OpinionMessageService的GetMessages方法必须返回IObservable<OpinionAddedMessage>类型,否则订阅流无法正常推送事件。


内容的提问来源于stack exchange,提问作者user2932893

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 10:54:04