v3.0.26
更新日期: 2025.4.20
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Rpc
-
RpcActionFilterAttribute
在RpcImplementation
程序集中使用时无效bug。 #IC0IB0
TouchSocket.Http
-
WebSocket
服务端WebSocket
使用AsyncClose()
主动关闭连接时引发NullReferenceException
异常。 #IC1FZ8
v3.0.25
更新日期: 2025.4.12
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.SerialPort
- 接收数据时,如果业务出现延迟,则会导致接收失败的异常bug。 #IBZHN2
v3.0.21(3)(4)
更新日期: 2025.4.6
更新描述:
兼容性修复升级。http组件性能优化。
更新详情:
TouchSocket.Core
-
ReadOnlySpan<byte>
的Trim
方法。 -
Method
新增支持类型的直接构造函数方法。 -
AsyncResetEvent
新增已释放判断。 -
DynamicMethod
在ref、out等参数时,无法使用源生成调用的bug。 -
FlowOperator
的在构造函数使用最大值初始化MaxSpeed
。
TouchSocket.Sockets
-
TcpCore
在特点情况下不释放资源的bug。PR -
ShutdownAsync
调整返回值,由Task
改为Task<Result>
。
TouchSocket.Http
-
HttpContent
新增TryComputeLength
的抽象方法。 -
HttpResponse
的FromFileAsync
扩展新增传输限速、进度功能。#IBYGC7 - 整个
Http
组件性能优化。 -
HttpHeaders
由枚举改为静态类。(此操作不影响现有代码)
v3.0.20
更新日期: 2025.3.30
更新描述:
兼容性修复升级。部分方法名大小写调整。
更新详情:
TouchSocket.Core
-
TouchSocketCoreUtility
类中的所有静态字段大小写调整。 -
StringExtension
类中的多个方法名大小写调整(此处调用时可能是扩展方法调用的,所以需要注意)。
TouchSocket.Http
-
HttpClient
在请求application/x-www-form-urlencoded
时,内部未进行编码的bug。#IBVPAD -
HttpResponse
新增FromHtml
扩展方法,用于直接返回Html
页面。
TouchSocket.Rpc
-
IRpcCallContextAccessor
服务,可以在异步调用流中,通过服务直接获取到执行Rpc
的CallContext
。
TouchSocket.WebApi.Swagger
-
Swagger
页面版本为v5.20.2
,以支持一键复制url等功能。 #IBX933
TouchSocket.Modbus
-
Modbus rtu
在响应数据时的严谨性,基本排除了站号,功能码不一致时仍然返回的错误情况。 #github-issue 54
v3.0.19
更新日期: 2025.3.23
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Http
- Http静态内容插件在客户端不支持gzip时仍然会使用gzip的bug。
- Http静态内容插件在以文件响应时,限速为0的bug。#IBVCPJ
v3.0.18
更新日期: 2025.3.16
更新描述:
兼容性修复升级。少量代码调整,详见
更新详情:
TouchSocket.Sockets
-
TryShutdown
的关闭机制没有考虑异步发送队列的情况。#IBTKMP -
TryShutdown
方法改为ShutdownAsync
。
TouchSocket.Http
v3.0.17
更新日期: 2025.3.12
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Sockets
- UdpSessionBase的OnUdpReceiving方法添加EndPoint参数。#IBSQVN
TouchSocket.SerialPorts
- SerialPortClient在接收数据时LastReceivedTime一直不会更新。#IBSXDK
v3.0.16
更新日期: 2025.3.9
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
- 自定义适配器在接收数据时,不验证
MaxPackageSize
的bug
。 -
MakeIdentifier
在获取方法名称时,不显示中文等其他字符的bug
#IBQQHY。
TouchSocket.Sockets
- 当配置
NoDelay
时,TcpCore
发送时仍然会把数据放入发送队列,可能会产生细微延迟 #IBR1I2。 -
IWaitingClient
实现了无效的Dispose
方法,目前已取消。
v3.0.15
更新日期: 2025.3.2
更新描述:
兼容性修复升级。
更新详情:
All
- 代码规范和相关注释。
TouchSocket.Core
-
SystemExtension
新增ReadAllToByteArray
方法。
v3.0.14
更新日期: 2025.2.15
更新描述:
修复升级。区间字符适配器会有不兼容部分,请参阅[区间字符]。
更新详情:
All
- 所有的
Plugin
接口。均新增快捷扩展方法,简化使用。 - 使用自定义的
lock
锁对象。以简化使用场景。
TouchSocket.Core
-
ILog
接口新增DateTimeFormat
属性。 #IBLQBX - 自定义区间适配器在未找到开始字符的情况下,也会缓存数据的bug。 #IBKPXU
- 自定义区间适配器的运行逻辑,简化使用方式。 #IBKPXU
TouchSocket.Rpc
-
IRpcActionFilter.ExecutedAsync
在执行异常时,Exception
参数一直为空的bug。#IBK579
TouchSocket.Dmtp
-
TokenVerifyException
异常信息中新增Metadata属性。 -
TcpDmtpService
中使用e.IsPermitOperation = false;
拒绝客户端无效的bug。#IBKO6A
v3.0.13
更新日期: 2025.1.27
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
- 在
net framework
下,如果Span<byte>
为空时,ToString
会异常的bug
。 #IBIYRQ
v3.0.12
更新日期: 2025.1.19
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
FileLogger
的路径合并方式。
v3.0.11
更新日期: 2025.1.12
更新描述:
兼容性修复升级。
更新详情:
All
- 全系新增
EasyTask.ContinueOnCapturedContext
的设定,以解决Unity3d
在webgl
平台下,会卡住的问题。
TouchSocket.Core
-
IWaitHandlePool<T>
的接口抽象。
TouchSocket.Http
-
HttpResponse
新增SetRedirect
重定向功能。#IBG1QT -
HttpRequest
在请求时的编码效率。 -
HttpRequest
不会对中文等非Ascii
编码的字符进行url encode
的bug
。#IBGATN - 在客户端,执行
IWebApiRequestPlugin
插件时,HttpRequest
无法通过GetContent
或者GetBody
获取数据。#IBGARB
v3.0.10
更新日期: 2025.1.5
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
AsyncBoundedQueue
新增Capacity
、Count
等属性。 -
CustomJsonDataHandlingAdapter
自定义适配器,方便自定义继承实现。 -
CustomCountSpliterDataHandlingAdapter
固定数量分隔符适配器。#IBF0Z7 -
IByteBlock
新增ReadT
和WriteT
方法。
TouchSocket.Sockets
-
CheckClearPlugin
在客户端断开后,仍然会触发断开的bug。#IBECPA
v3.0.9
更新日期: 2024.12.22
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Core
-
SystemTextJsonStringToClassSerializerFormatter
转换器。 -
IPackage
源生成时,默认支持Guid
。#IBC1FH
TouchSocket.Sockets
TouchSocket.SerialPort
-
SerialPortClient
串口组件ProtectedMainSerialPort
属性null
错误。#IBBQ4A
TouchSocket.AspNetCore
-
IWebSocketDmtpService
接口中缺少Clients
属性。#IBBQS5
TouchSocket.Modbus
-
ModbusRtu
在crc
校验失败时,会抛出ResponseMemoryVerificationError = 99
的错误码。#IBC1J2
TouchSocket.WebApi
-
WebApi
支持Put
、Delete
、Options
请求方式。 -
WebApi
当参数解析异常时,RpcActionFilterAttribute
无法捕获。#IBCI94 -
WebApiParserPlugin
使用Mapping
代替GetRouteMap
和PostRouteMap
。
TouchSocket.JsonRpc
-
JsonRpc
支持Aot
。
v3.0.8
更新日期: 2024.12.15
更新描述:
兼容性修复升级。
更新详情:
TouchSocket.Sockets
-
IPHost
类,在Mono
运行时会异常的bug。 #IBAG51 -
UdpSessionBase
类调整ReceivingData
为OnUdpReceiving
。 -
Udp
组件,新增IUdpReceivingPlugin
插件。#IBB1F6
TouchSocket.AspNetCore
- 当使用基于
WebSocket
协议,搭建DmtpServer
服务时 使用app.UseOutputCache()
缓存中间件导致连接失败后,重连无响应。#IBAPTQ
TouchSocket.Dmtp
-
DmtpActor
类,在连接成功时,Handshaking
事件参数e.Message
无法传回到请求端。
TouchSocket.SerialPorts
-
SerialPortClient
类,在关闭或者释放时,资源无法释放的bug。 #IBB8FD
v3.0.7
更新日期: 2024.12.8
更新描述:
兼容性修复升级。在.Net9.0中,启用Lock锁代替object锁,提高锁效率。
更新详情:
TouchSocket.Core
-
ValueByteBlock
类,在WritePackage
时数据无效的bug。 - 开放
PackageFastBinaryConverter
类,以支持二进制数据序列化源生成。
TouchSocket.Dmtp
-
DmtpRpc
新增RpcDispatcher
调度器,支持多线程并发,或者单线程调度。 -
DefaultSerializationSelector
优化支持System.Text.Json
源生成模式的序列化。 - 触发
OnFileTransferred
事件的时机调到SendAsync
前面,目的是保证调用方在收到回复时,响应方已经完成事件处理。此操作理论上不会对现有运行逻辑造成影响。 -
DmtpRpc
在发送Rpc
请求时,如果请求模式使用OnlySend
、或者WaitSend
,则会抛出异常的bug。#IB9F8P
TouchSocket.Modbus
- 在
IModbusResponse
返回响应时,会同时携带返回响应的当前请求IModbusRequest
。
TouchSocket.WebApi
-
WebApiSerializerConverter
类,以支持更好的System.Text.Json
源生成模式的序列化。
TouchSocket.Rpc
- 在
ReenterableAttribute
特性,可以强制设置Rpc
函数是否为重入模式。 -
ConcurrencyRpcDispatcher
并发调度器,支持多线程并发。 -
ImmediateRpcDispatcher
当前调度器,直接在当前线程执行。 -
QueueRpcDispatcher
队列调度器,把所有请求,放在一个队列中,等待处理。
v3.0.5(6)
更新日期: 2024.12.1
更新描述:
兼容性修复升级。全面支持PluginManager
容器化模块和Scoped
区域划分。
此修改不影响现有运行逻辑。但是如果是Asp.Net Core项目,则可能会影响
Scoped
服务运行结果。
更新详情:
TouchSocket.Core
-
FlowOperator
类。以实现流量速度限制。 -
PluginManager
类。新增FromIoc
的设定,支持插件容器化。 -
Result
类。使用record
修饰,简化使用逻辑。 -
IResolver
的Resolve
行为。当服务未注册时,会返回null
。不会再触发异常。 -
SetupConfigObject
在Build时,会创建一个新的Scoped生命周期的容器。这个在现有架构下,不会影响运行结果。 -
Metadata
在添加相同键值时,会异常的bug,正确操作应该是覆盖旧值。 -
IResolver
移除对IRegistered
接口的实现,所以无法再使用IResolver
判断某个服务是否已注册。 -
IResolver
移除对TryResolve
扩展方法实现,请使用Resolve
直接代替。
TouchSocket.Sockets
TouchSocket.Http
-
HttpBase
新增ReadCopyToAsync(Stream stream, HttpFlowOperator flowOperator)
方法。支持传输进度、速度显示。#IB7GIC -
HttpFlowOperator
类,支持Http上传、下载文件(流)时,可以方便的实现限速、传输进度、速度显示等。 -
StreamHttpContent
在传输流数据时,支持HttpFlowOperator
相关操作。
TouchSocket.Rpc
-
Rpc
代码生成器在生成通用泛型类型时,会失败的bug。#IB7IB2
v3.0.4
更新日期: 2024.11.24
更新描述:
修复升级。WebSocket有少量代码差异,下面会详细介绍。
更新详情:
TouchSocket.Core
-
JsonPackageAdapter
适配器,专门解决纯Json数据格式的粘分包。详情参见:JsonPackageAdapter。 -
IByteBlock
新增WriteNormalString
方法,用于写入普通字符串。 -
Container
容器新增Scoped生命周期,但是本身容器并未实现功能,如果需使用,请使用TouchSocket.Core.DependencyInjection。 -
Tcp、NamedPipe、SerialPort、DmtpRpc、JsonRpc、WebApi
等所有组件,支持Scoped容器。(需配合TouchSocket.Core.DependencyInjection容器)。
TouchSocket.Http
-
HttpStaticPagePlugin
新增SetContentTypeProvider(Action<IContentTypeProvider> provider)
方法。 -
WebSocket
新增CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription)
方法。 -
WebSocket
在Close
时,不符合规范的bug。#IAAF3U,#IB5IH0 -
IWebSocketClosingPlugin
的事件参数,由ClosedEventArgs
调整为ClosingEventArgs
。 重新实现接口解决
TouchSocket.Sockets
-
TcpClient
在重连之后,适配器失效的bug。 #IB6KZJ
TouchSocket.Rpc
-
Rpc
服务新增IScopedRpcServer
。
TouchSocket.SerialPort
-
SerialPortClient
在重连之后,适配器失效的bug。
TouchSocket.NamedPipe
-
INamedPipeSession
新增DataHandlingAdapter
属性。 -
NamedPipeClient
在重连之后,适配器失效的bug。
TouchSocket.Modbus
-
Modbus
在写入时,会携带IModbusResponse
的返回值。 #IATPWB
v3.0.3
更新日期: 2024.11.17
更新描述:
兼容性修复升级。
更新详情:
-
WaitingClient
在收到ResponsedData
数据时,优先建议使用ByteBlock
,在高效场景中代替原Data
属性。
v3.0.2
更新日期: 2024.11.15
更新描述:
兼容性修复升级。
更新详情:
- 串口的发送与接收无法通过插件获取到原始数据。#IB4NF4
v3.0.0(1)
更新日期: 2024.11.13
更新描述:
大版本升级,有部分不兼容性升级。所以请在升级前做好备份,同时在升级之后,请务必阅读v3.0升级指南。
本次改动在运行时完全兼容v2.1
,所以客户端和服务器可以差异版本更新。
更新详情:
SDK
- 新增
net9.0
支持。 - 移除
net7.0
支持,但是不影响net7.0
使用,因为最低到net6.0
的支持。
TouchSocket.Core
-
Plugin
组件默认支持AOT
,不再借助委托实现。 -
AppMessenger
组件默认支持AOT
。 -
DependencyObject
类使用“懒汉式”加载内部成员,减少内存使用。 -
PluginManager
支持在运行时移除插件。 -
Method
类,在方法、或类添加[DynamicMethod]
特性时,默认支持AOT
,为动态调用提供极大方便。
TouchSocket.Core.DependencyInjection
-
AspNetCoreContainer
不支持KeysService
的bug。
TouchSocket.Sockets
-
IReceiver
在启用缓存模式时,如果已经完成接收,则会抛出异常的bug。 #IB44LL
TouchSocket.Http
-
HttpRequest
在请求时,不用传参,直接使用默认构造函数即可。 -
GetMultifileCollection
相关扩展方法,使用GetFormCollectionAsync
代替。
TouchSocket.Rpc
-
ICallContext
继承IDependencyObject
,支持扩展属性读写,可以更方便的开发。 -
Rpc
特性取消构造函数入参,使用属性设置。受影响的有:DmtpRpc
、JsonRpc
、XmlRpc
、WebApi
。
TouchSocket.Dmtp
-
DmtpRpc
在Avalonia-Web
工作时,连接时间超长的bug。 -
IWebSocketDmtpClient
不实现IDmtpClient
的bug。 -
DmtpHeartbeatPlugin
在长时间运行时,可能会失效的bug。 -
[DmtpRpc]
特性不再允许继承,所有设置也是通过属性设置。
TouchSocket.JsonRpc
-
[JsonRpc]
特性不再允许继承,所有设置也是通过属性设置。
TouchSocket.WebApi
-
[FromBody]
特性,支持指定参数来源自Http的请求Body。 -
[FromForm]
特性,支持指定参数来源自Http的请求Form表单。 -
[FromHeader]
特性,支持指定参数来源自Http的请求Header。 -
[FromQuery]
特性,支持指定参数来源自Http的请求Query。 -
[WebApi]
特性不再允许继承,所有设置也是通过属性设置。 - WebApi的请求方式,目前全部使用
WebApiRequest
类来表示全部入参,一般如果使用代理,或者源生成的话,只需要重新生成即可。 -
HttpMethodType.GET
枚举,使用HttpMethodType.Get
代替。 -
HttpMethodType.POST
枚举,使用HttpMethodType.Post
代替。
TouchSocket.XmlRpc
-
[XmlRpc]
特性不再允许继承,所有设置也是通过属性设置。