跳到主要内容

v3.0.26

更新日期: 2025.4.20

更新描述:

兼容性修复升级。

更新详情:

TouchSocket.Rpc

  •   RpcActionFilterAttributeRpcImplementation程序集中使用时无效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的抽象方法。
  •   HttpResponseFromFileAsync扩展新增传输限速、进度功能。#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服务,可以在异步调用流中,通过服务直接获取到执行RpcCallContext

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

  •   HttpExtensionsGetBoundary实现存在问题。#IBT3RO
  •   静态页面插件在重新载入时prefix参数丢失问题。#IBTP38

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

  •   自定义适配器在接收数据时,不验证MaxPackageSizebug
  •   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的设定,以解决Unity3dwebgl平台下,会卡住的问题。

TouchSocket.Core

  •   IWaitHandlePool<T>的接口抽象。

TouchSocket.Http

  •   HttpResponse新增SetRedirect重定向功能。#IBG1QT
  •   HttpRequest在请求时的编码效率。
  •   HttpRequest不会对中文等非Ascii编码的字符进行url encodebug#IBGATN
  •   在客户端,执行IWebApiRequestPlugin插件时,HttpRequest无法通过GetContent或者GetBody获取数据。#IBGARB

v3.0.10

更新日期: 2025.1.5

更新描述:

兼容性修复升级。

更新详情:

TouchSocket.Core

  •   AsyncBoundedQueue新增CapacityCount等属性。
  •   CustomJsonDataHandlingAdapter自定义适配器,方便自定义继承实现。
  •   CustomCountSpliterDataHandlingAdapter固定数量分隔符适配器。#IBF0Z7
  •   IByteBlock新增ReadTWriteT方法。

TouchSocket.Sockets

  •   CheckClearPlugin在客户端断开后,仍然会触发断开的bug。#IBECPA

v3.0.9

更新日期: 2024.12.22

更新描述:

兼容性修复升级。

更新详情:

TouchSocket.Core

  •   SystemTextJsonStringToClassSerializerFormatter转换器。
  •   IPackage源生成时,默认支持Guid#IBC1FH

TouchSocket.Sockets

  •   TcpServiceResetId后,偶发性客户端集合丢失客户端的问题。#IBCUHW
  •   WaitingClient使用ResponsedData时第二次接受报错。#IBC8D2

TouchSocket.SerialPort

  •   SerialPortClient串口组件ProtectedMainSerialPort属性null错误。#IBBQ4A

TouchSocket.AspNetCore

  •   IWebSocketDmtpService接口中缺少Clients属性。#IBBQS5

TouchSocket.Modbus

  •   ModbusRtucrc校验失败时,会抛出ResponseMemoryVerificationError = 99的错误码。#IBC1J2

TouchSocket.WebApi

  •   WebApi支持PutDeleteOptions请求方式。
  •   WebApi当参数解析异常时,RpcActionFilterAttribute无法捕获。#IBCI94
  •   WebApiParserPlugin使用Mapping代替GetRouteMapPostRouteMap

TouchSocket.JsonRpc

  •   JsonRpc支持Aot

v3.0.8

更新日期: 2024.12.15

更新描述:

兼容性修复升级。

更新详情:

TouchSocket.Sockets

  •   IPHost类,在Mono运行时会异常的bug。 #IBAG51
  •   UdpSessionBase类调整ReceivingDataOnUdpReceiving
  •   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修饰,简化使用逻辑。
  •   IResolverResolve行为。当服务未注册时,会返回null。不会再触发异常。
  •   SetupConfigObject在Build时,会创建一个新的Scoped生命周期的容器。这个在现有架构下,不会影响运行结果。
  •   Metadata在添加相同键值时,会异常的bug,正确操作应该是覆盖旧值。
  •   IResolver移除对IRegistered接口的实现,所以无法再使用IResolver判断某个服务是否已注册。
  •   IResolver移除对TryResolve扩展方法实现,请使用Resolve直接代替。

TouchSocket.Sockets

  •   IPHost.NET Framework下,设定任意端口无效的bug。 #IB7PM1#IA8NQ2

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)方法。
  •   WebSocketClose时,不符合规范的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特性取消构造函数入参,使用属性设置。受影响的有:DmtpRpcJsonRpcXmlRpcWebApi

TouchSocket.Dmtp

  •   DmtpRpcAvalonia-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]特性不再允许继承,所有设置也是通过属性设置。