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

SignalR的OnDisconnected处理器中调用UserHostName抛出ArgumentException原因?

异常触发原因
  • HTTP上下文已被回收
    当OnDisconnected处理器执行时,当前SignalR连接对应的HTTP请求生命周期已经结束,ASP.NET运行时已经释放或清理了HttpContext的大部分属性资源,UserHostName依赖的请求元数据已经不存在,访问时触发参数校验失败异常。
  • 网络连接已断开
    UserHostName属性需要从活动的TCP套接字连接中读取客户端地址信息,触发OnDisconnected时客户端和服务端的连接已经关闭,套接字相关属性为空,底层读取逻辑校验参数时抛出"值不在预期范围内"的异常。
  • 非HTTP传输协议的上下文不完整
    如果你使用WebSocket、Server-Sent Events等长连接传输协议,SignalR不会在断开阶段保留完整的HTTP上下文快照,Context.Request.GetHttpContext()返回的是残缺的上下文对象,UserHostName属性未初始化,访问就会抛出异常。
规避方案

在OnConnectedAsync连接建立阶段提前读取UserHostName,将其和当前连接的ConnectionId绑定存储到内存、自定义连接元数据或者持久化存储中,OnDisconnected触发时直接根据ConnectionId读取提前缓存的值即可,不需要再访问HttpContext。


内容的提问来源于stack exchange,提问作者André Reichelt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:05