Azure Web PubSub事件处理端点执行异常问题求助
解决Azure Web PubSub /eventhandler端点的InvalidOperationException异常
修复步骤:
1. 调整中间件注册顺序
确保UseRouting()在UseEndpoints()之前注册,且不要手动添加UseWebPubSub()中间件(新版本SDK通过MapWebPubSubHub完成端点与中间件的绑定,重复添加会导致管道冲突)。正确的Program.cs结构示例:
var builder = WebApplication.CreateBuilder(args); // 注册Web PubSub服务 builder.Services.AddWebPubSub<Sample_ChatApp>(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 路由中间件必须在端点配置前加载 app.UseRouting(); // 可选:添加授权中间件(如果业务需要) // app.UseAuthorization(); // 配置所有端点 app.UseEndpoints(endpoints => { endpoints.MapGet("/negotiate", async (WebPubSubServiceClient<Sample_ChatApp> serviceClient, HttpContext context) => { var id = context.Request.Query["id"]; if (id.Count != 1) { context.Response.StatusCode = 400; await context.Response.WriteAsync("missing user id"); return; } await context.Response.WriteAsync(serviceClient.GetClientAccessUri(userId: id).AbsoluteUri); }); endpoints.MapWebPubSubHub<Sample_ChatApp>("/eventhandler/{*path}"); endpoints.MapGet("/msg", async (WebPubSubServiceClient<Sample_ChatApp> serviceClient, HttpContext context) => { await serviceClient.SendToAllAsync("test"); }); }); app.Run();
2. 升级NuGet包版本
确保安装了最新稳定版的Microsoft.Azure.WebPubSub.AspNetCore包,版本不兼容可能导致端点注册逻辑异常。可通过命令行升级:
dotnet add package Microsoft.Azure.WebPubSub.AspNetCore --version <最新稳定版本号>
3. 验证路由匹配
确认Azure Web PubSub服务发送的请求路径(如/eventhandler/connect、/eventhandler/message)能匹配到/eventhandler/{*path}模板,且未被其他路由或中间件拦截。
异常原因说明
出现该错误通常是以下情况导致:
- 路由中间件顺序错误,
UseRouting()未在UseEndpoints()前注册,导致路由系统无法识别/eventhandler端点。 - 重复添加
UseWebPubSub()中间件,导致Web PubSub请求在路由处理前就进入中间件,无法匹配到正确端点。 - NuGet包版本老旧,存在端点注册逻辑的bug。
内容的提问来源于stack exchange,提问作者Kywillis
相关产品推荐
相关产品推荐

