5.9K Star 11.7K Fork 4K

GVPdotNET China / Furion

 / 详情

WebSocket关闭后报错The response headers cannot be modified because the response has already started.

已完成
创建于  
2023-03-23 12:19

输入图片说明

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将无法得到答复。

Furion 版本号

哪个版本号?
4.8.7.3

.NET SDK 版本号

  • .NET6

项目类型

  • WebApi

操作系统和版本

  • Windows(版本号?)

代码环境

  • 开发环境(Development)

描述你的问题

发生了什么?

WebSocket关闭后,抛出异常

异常堆栈信息

输入图片说明

异常堆栈是什么?
输入图片说明
执行了webSocket.CloseAsync()方法抛出异常


测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则将无法得到答复。⚠⚠

您的代码下载地址?
https://gitee.com/dihl/test-websocket.git

输入图片说明
使用的微软提供的测试代码。不使用框架在关闭的时候不抛异常,使用框架的抛异常

测试方法:
使用websocket在线测试工具
http://www.jsons.cn/websocket/
地址输入:
ws://localhost:53785/ws
点击连接。
之后点击断开连接,vs就会有异常信息

数据库信息和版本

请提供安装的 NuGet 包版本号。

  • Sqlite(包名和版本号?)
  • SqlServer(包名和版本号?)
  • MySQL(包名和版本号?)
  • Oracle(包名和版本号?)
  • PostgreSQL(包名和版本号?)
  • Firebird(包名和版本号?)
  • Cosmos(包名和版本号?)
  • InMemoryDatabase(包名和版本号?)

期待结果

期待的结果是?
在websocket关闭后,不抛出异常。


确认工单

为了减少不必要的沟通成本和时间成本,请再次确认 Issue 已按照要求正确填写,否则将被直接关闭。

评论 (8)

gydihl 创建了任务
gydihl 修改了描述
展开全部操作日志

这个错误和框架关系不大:The response headers cannot be modified because the response has already started.

这个错误提示的是:Http Response 已经开始 Write 了,也就是已经向客户端输出字节流了,不能再改变数据了!

所以正确应该是,使用 response 输出的时候,先判断 if(!response.HasStarted) { 你的代码 }

我先定位一下问题,当然如果 Furion 底层可以解决就解决,如果和框架无关,那么就关闭 Issue

已修复:8e1965b

今天发布

确认了问题时启用规范化结果之后导致的,正确的处理是 Furion 底层如果判断是 WebSocket 请求,则跳过规范化处理。

百小僧 任务状态待办的 修改为已完成

Furion v4.8.7.20 版本发布,更新所有包至该版本即可

输入图片说明

遇到同样的问题。在service里用[DynamicApiController] 方式的接口报错。。直接在Controller写的接口没问题。

输入图片说明
输入图片说明

输入图片说明

不是websocket,是sse方式。

统一贴 [NonUnify] 特性即可解决。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助