For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
预约演示登录免费开始
  • 使用 SDK
    • SDK 概述
    • SDK 如何工作
    • Quickstart
    • Customer showcase
  • 使用 SDK
    • 项目结构
    • 添加自定义代码
    • Migrating to Replay
    • 功能特性
  • 参考
      • Generating an SDK
      • 发布到 NuGet
      • Configuration
      • 添加自定义代码 (.NET)
      • .NET 兼容性
      • 变更日志
      • Customer showcase
  • 资源
    • generators.yml
Checking status...
SOC2Soc 2 Type II
© 2026 Fern • Birch Solutions, Inc., a Postman company

Documentation

SDKsDocsAsk FernCLI Reference

API Definitions

OpenAPIAsyncAPIOpenRPCgRPC

Resources

BlogSupportPricing

Company

Brand KitPrivacy PolicyTerms of Service
LogoLogo
预约演示登录免费开始
参考.NET

Changelog

March 20, 2026
March 20, 2026
此页面是否有帮助?
编辑此页面
上一个

March 23, 2026

下一个

March 19, 2026

2.53.0

(fix): 在生成代码中对所有 System 命名空间引用强制使用 global:: 前缀。 这可以防止当客户项目定义了名为 System 的类型或命名空间时出现 CS0118/CS0426 编译错误 (例如根命名空间 Foo.Net 中有一个 System 类)。 所有 using System.* 指令和内联的 System.* 类型引用现在都使用 global::System.*。 seed.yml 中的 CI 验证脚本将在未来强制执行此规则。

2.52.0

(feat): 仅在目标为 net8.0 之前的 TFM(netstandard2.0、net462)时有条件地发出 System.Text.Json 作为 PackageReference。 该包被包装在一个带有 MSBuild IsTargetFrameworkCompatible 条件的 ItemGroup 中, 因此在 net8.0+ 中会被跳过,因为它已内置在框架中。

2.51.1

(chore): 移除 QueryStringBuilder 中死代码的 #elif NET7_0_OR_GREATER 和 #else 分支, 这些分支只能在 .NET 6 或 .NET 7 上执行,而这些版本已不再受支持。

2.51.0

(feat): 为所有生成的 C# SDK 项目添加 net9.0 目标框架。该库现在目标为 net462;net8.0;net9.0;netstandard2.0, 支持 #if NET9_0_OR_GREATER 代码路径,例如用于传输层死连接检测的 ClientWebSocketOptions.KeepAliveTimeout。 测试项目现在目标为 net9.0 而不是 net8.0。

(feat): 添加全面的 WebSocket 单元和端到端测试模板。所有生成的 WebSocket SDK 现在都带有 349 个测试, 覆盖 AsyncLock、Event<T>、ReconnectStrategy、DisconnectionInfo、RequestMessage、Query、 WebSocketConnection、WebSocketClient、ReconnectionInfo 和 WebsocketException。 端到端测试针对进程内的 TestWebSocketServer 运行,覆盖回显、快速发送、重连、服务器关闭、 中止恢复、并发客户端、大消息和完整生命周期。当 Fern 定义包含 WebSocket 端点时, 模板会有条件地发出。

(feat): 在 WebSocketClient 上公开 StateCheckInterval 属性。该属性(默认:5 秒) 在 ConnectAsync 中转发到 WebSocketConnection,允许调用者控制后台状态监视器轮询静默断开连接的频率。

(fix): 修复服务器启动的关闭跳过重连的问题。当服务器发送 WebSocketMessageType.Close 帧时, Listen() 方法使用 return 完全退出——绕过了 ReconnectSynchronized 调用。 更改为使用 closedByServer 标志的 break,以便重连使用 ReconnectionType.ByServer 执行。

(fix): 修复服务器启动的关闭忽略 CancelReconnection 标志的问题。 OnDisconnectionHappened 回调在 Close 处理程序中触发,用户可以设置 info.CancelReconnection = true, 但在调用 ReconnectSynchronized 之前从未检查此标志。现在捕获到本地 cancelReconnect 变量中, 并在重连之前进行检查。

2.50.0

(feat): 为 WebSocket 连接添加指数退避重连策略。 新的 ReconnectStrategy 类提供可配置的指数退避(从 1 秒到 60 秒的加倍间隔)、 可选的随机抖动(0-25%)以防止雷群效应,以及可配置的最大尝试次数。 该策略作为 ReconnectBackoff 属性暴露在生成的 Options 类上, 并通过 WebSocketClient 连接到 WebSocketConnection.Reconnect()。 当最大尝试次数用尽时,重连停止并引发断开连接事件。成功重连后退避会重置。

2.49.0

(feat): 添加每次发送超时以防止 SendAsync 挂起。WebSocketConnection 上的新 SendTimeout 属性 (默认:30 秒)使用链接的 CancellationTokenSource 包装每个 SendAsync 调用, 该源在 CancelAfter(SendTimeout) 后触发。当超时到期时,连接会被中止并抛出 WebsocketException, 防止单个死连接阻塞发送锁长达 30 分钟。 参见:https://github.com/dotnet/runtime/issues/125257

2.48.0

(feat): 为 WebSocketConnection 添加带消息过期的有界发送队列。 无界的 Channel<T> 队列被替换为可配置的有界通道(SendQueueLimit,默认:10,000), 使用 BoundedChannelFullMode.DropWrite 在队列满时拒绝新消息。 SendCacheItemTimeout 属性(默认:30 分钟)会在清空过程中静默丢弃过期消息, 防止网络中断期间的内存增长,避免在重连后发送过时消息。 将 SendQueueLimit 设置为 0 表示无界,或将 SendCacheItemTimeout 设置为 null 以禁用过期。

2.47.0

(feat): 通过后台状态监视器任务添加接收挂起检测。新的 StateCheckInterval 属性 (默认:5 秒)控制监视器轮询 WebSocket.State 的频率。当状态转换为 Closed、 Aborted 或 CloseReceived——表示 TCP 连接已断开但未通知接收循环—— 监视器通过链接的 CancellationTokenSource 取消待处理的 ReceiveAsync。 这解决了已知的 .NET 运行时问题,即在静默 TCP 断开连接时 ReceiveAsync 无限期挂起 (dotnet/runtime#110496)以及 Abort() 无法取消待处理接收(dotnet/runtime#44272)。 将 StateCheckInterval 设置为 null 以禁用。

2.46.0

(feat): 连接 WebSocket 重连逻辑。WebSocketConnection 模板现在包含从 Marfusios 库移植的完整重连实现: 心跳计时器(ReconnectTimeout)、错误重试计时器(ErrorReconnectTimeout)、 丢失连接延迟(LostReconnectTimeout)以及 Reconnect()/ReconnectOrFail() 公共方法。 生成的 WebSocket API 类公开 Reconnecting 事件和 IsReconnectionEnabled 选项(默认:false), 以便调用者可以选择加入自动重连。所有超时属性都是可配置的,并具有合理的默认值。

2.45.1

(fix): 修复重连时粘性压缩的问题。当 EnableCompression 为 false 时, DeflateOptions 现在被明确重置为 null,防止先前的非空值在连接周期中持续存在。

2.45.0

(feat): 为生成的 WebSocket 客户端类添加 InjectTestMessage 内部方法。 这允许单元测试通过普通的 OnTextMessage 管道注入原始 JSON 字符串来模拟传入的 WebSocket 消息, 而无需真实的 WebSocket 连接。该方法被标记为 internal,因此只能通过测试项目中的 [InternalsVisibleTo] 访问, 保持公共 API 表面的清洁。

2.44.0

(feat): 为 WebSocket 连接层通过 Channel<T> 添加队列发送。两个无界通道(文本和二进制) 由与连接一起启动的专用后台任务清空。非阻塞的 Send(string) 和 Send(byte[]) 方法返回 bool 指示消息是否已排队,而现有的 SendInstant 每发送异步路径保持不变。 队列在取消令牌发信号之前在 Dispose 中完成。清空循环错误通过 ExceptionOccurred 事件暴露。

2.43.0

(feat): 为 WebSocket 连接添加每消息 deflate 压缩支持(RFC 7692)。 生成的 WebSocket Options 类上的新 EnableCompression 选项通过 ClientWebSocketOptions.DangerousDeflateOptions 启用 WebSocketDeflateOptions。这可以显著减少文本重(JSON)WebSocket API 的带宽。 警告:在发送包含机密的数据时不要使用压缩(CRIME/BREACH 漏洞)。 详细信息请参见 https://learn.microsoft.com/dotnet/api/system.net.websockets.clientwebsocketoptions.dangerousdeflateoptions。

2.42.0

(feat): 通过 SocketsHttpHandler 添加对 HTTP/2 WebSocket 的支持。WebSocket Options 类上的新 HttpInvoker 属性 允许传递 HttpMessageInvoker 以启用在单个 TCP 连接上多路复用多个 WebSocket 流。 设置时,连接工厂配置 HttpVersion.Version20 并在 .NET 7+ 上使用 ConnectAsync(Uri, HttpMessageInvoker, CancellationToken) 重载。在较旧的目标上, 调用器被忽略并使用标准连接路径。

2.41.0

(feat): 为 WebSocketConnection 和 WebSocketClient 添加 ConnectTimeout 属性,默认为 5 秒。 StartClient 中的连接工厂调用现在使用带有 CancelAfter(ConnectTimeout) 的链接 CancellationTokenSource, 防止服务器无响应时的无限期挂起。

2.40.0

(feat): 在 ClientWebSocket 上配置 PING/PONG keep-alive。默认连接工厂现在设置 KeepAliveInterval (默认:30 秒)以及在 .NET 9+ 上的 KeepAliveTimeout(默认:20 秒), 以启用在传输层检测无响应服务器的 PING/PONG keep-alive 策略。 这两个值都作为公共属性在 WebSocketConnection 上公开,供调用者自定义。

2.38.2

(fix): 在 WebSocket OnTextMessage 处理程序中为 JsonDocument 添加 using 声明。 JsonDocument 实现 IDisposable 并持有池化内存缓冲区;没有销毁,高消息吞吐量会导致内存压力。 生成的代码现在发出 using var json = await JsonSerializer.DeserializeAsync<JsonDocument>(stream);, 以便在方法返回时销毁文档。