修复响应消息重复解码及缓冲区脏读问题 增加对 Reply 消息的判断,避免重复解码和提前归还 ArrayPool 缓冲区,防止并发解码时出现脏数据。补充详细注释说明处理原因。大石头 authored at 2026-05-18 16:51:06
diff --git a/Benchmark/NewLife.Remoting.Benchmarks.csproj b/Benchmark/NewLife.Remoting.Benchmarks.csproj
index bf7abfb..ed3f3e2 100644
--- a/Benchmark/NewLife.Remoting.Benchmarks.csproj
+++ b/Benchmark/NewLife.Remoting.Benchmarks.csproj
@@ -13,7 +13,7 @@
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.15.8" />
- <PackageReference Include="NewLife.Core" Version="11.15.2026.501" />
+ <PackageReference Include="NewLife.Core" Version="11.15.2026.517-beta0720" />
</ItemGroup>
<ItemGroup>
diff --git a/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj b/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
index ce133bc..fad53d6 100644
--- a/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
+++ b/NewLife.Remoting.Extensions/NewLife.Remoting.Extensions.csproj
@@ -64,7 +64,7 @@
</None>
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.XCode" Version="11.25.2026.403" />
+ <PackageReference Include="NewLife.XCode" Version="11.26.2026.509" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NewLife.Remoting\NewLife.Remoting.csproj" />
diff --git a/NewLife.Remoting/ApiClient.cs b/NewLife.Remoting/ApiClient.cs
index de9919a..b84b716 100644
--- a/NewLife.Remoting/ApiClient.cs
+++ b/NewLife.Remoting/ApiClient.cs
@@ -494,6 +494,10 @@ public class ApiClient : ApiHost, IApiClient
// Api解码消息得到Action和参数
if (e.Message is not IMessage msg) return;
+ // 响应消息由 SendMessageAsync 匹配机制处理,InvokeWithClientAsync 会在异步 continuation 中解码 Payload。
+ // 若在此重复解码并 Dispose,会将 cloned payload buffer 提前归还 ArrayPool,导致并发 Decode 读到脏数据(buffer 被复用覆盖)。
+ if (msg.Reply) return;
+
using var apiMessage = Encoder.Decode(msg);
var e2 = new ApiReceivedEventArgs
{
diff --git a/NewLife.Remoting/NewLife.Remoting.csproj b/NewLife.Remoting/NewLife.Remoting.csproj
index 8e9b234..0e7a796 100644
--- a/NewLife.Remoting/NewLife.Remoting.csproj
+++ b/NewLife.Remoting/NewLife.Remoting.csproj
@@ -54,7 +54,7 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.15.2026.501" />
+ <PackageReference Include="NewLife.Core" Version="11.15.2026.517-beta0720" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/IoTZero/IoTZero.csproj b/Samples/IoTZero/IoTZero.csproj
index 3b3df38..4d810ef 100644
--- a/Samples/IoTZero/IoTZero.csproj
+++ b/Samples/IoTZero/IoTZero.csproj
@@ -24,11 +24,11 @@
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.10.2026.404" />
- <PackageReference Include="NewLife.IoT" Version="2.7.2026.201" />
- <PackageReference Include="NewLife.MQTT" Version="3.0.2026.403" />
- <PackageReference Include="NewLife.Redis" Version="6.5.2026.403" />
- <PackageReference Include="NewLife.Stardust.Extensions" Version="3.7.2026.403" />
- <PackageReference Include="NewLife.XCode" Version="11.25.2026.403" />
+ <PackageReference Include="NewLife.IoT" Version="2.7.2026.501" />
+ <PackageReference Include="NewLife.MQTT" Version="3.0.2026.501" />
+ <PackageReference Include="NewLife.Redis" Version="6.5.2026.501" />
+ <PackageReference Include="NewLife.Stardust.Extensions" Version="3.7.2026.501" />
+ <PackageReference Include="NewLife.XCode" Version="11.26.2026.509" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/Zero.Desktop/Zero.Desktop.csproj b/Samples/Zero.Desktop/Zero.Desktop.csproj
index bb0acea..8737029 100644
--- a/Samples/Zero.Desktop/Zero.Desktop.csproj
+++ b/Samples/Zero.Desktop/Zero.Desktop.csproj
@@ -26,8 +26,8 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Stardust" Version="3.7.2026.403" />
- <PackageReference Include="System.Speech" Version="10.0.7" />
+ <PackageReference Include="NewLife.Stardust" Version="3.7.2026.501" />
+ <PackageReference Include="System.Speech" Version="10.0.8" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/Zero.RpcServer/Zero.RpcServer.csproj b/Samples/Zero.RpcServer/Zero.RpcServer.csproj
index ec026cc..28475af 100644
--- a/Samples/Zero.RpcServer/Zero.RpcServer.csproj
+++ b/Samples/Zero.RpcServer/Zero.RpcServer.csproj
@@ -20,9 +20,9 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Redis" Version="6.5.2026.403" />
- <PackageReference Include="NewLife.Stardust" Version="3.7.2026.403" />
- <PackageReference Include="NewLife.XCode" Version="11.25.2026.403" />
+ <PackageReference Include="NewLife.Redis" Version="6.5.2026.501" />
+ <PackageReference Include="NewLife.Stardust" Version="3.7.2026.501" />
+ <PackageReference Include="NewLife.XCode" Version="11.26.2026.509" />
</ItemGroup>
<ItemGroup>
diff --git a/Samples/ZeroServer/ZeroServer.csproj b/Samples/ZeroServer/ZeroServer.csproj
index bf44450..eccd07e 100644
--- a/Samples/ZeroServer/ZeroServer.csproj
+++ b/Samples/ZeroServer/ZeroServer.csproj
@@ -20,9 +20,9 @@
<ItemGroup>
<PackageReference Include="NewLife.Cube.Core" Version="6.10.2026.404" />
- <PackageReference Include="NewLife.Redis" Version="6.5.2026.403" />
- <PackageReference Include="NewLife.Stardust.Extensions" Version="3.7.2026.403" />
- <PackageReference Include="NewLife.XCode" Version="11.25.2026.403" />
+ <PackageReference Include="NewLife.Redis" Version="6.5.2026.501" />
+ <PackageReference Include="NewLife.Stardust.Extensions" Version="3.7.2026.501" />
+ <PackageReference Include="NewLife.XCode" Version="11.26.2026.509" />
</ItemGroup>
<ItemGroup>
diff --git a/Test/Test.csproj b/Test/Test.csproj
index 338da5b..f3a3348 100644
--- a/Test/Test.csproj
+++ b/Test/Test.csproj
@@ -12,7 +12,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="NewLife.Core" Version="11.15.2026.501" />
+ <PackageReference Include="NewLife.Core" Version="11.15.2026.517-beta0720" />
</ItemGroup>
<ItemGroup>
diff --git a/XUnitTest.Samples/XUnitTest.Samples.csproj b/XUnitTest.Samples/XUnitTest.Samples.csproj
index 3e8530d..93666e5 100644
--- a/XUnitTest.Samples/XUnitTest.Samples.csproj
+++ b/XUnitTest.Samples/XUnitTest.Samples.csproj
@@ -13,7 +13,7 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.7" />
+ <PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.8" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="NewLife.UnitTest" Version="1.1.2026.102" />
<PackageReference Include="xunit" Version="2.9.3" />
diff --git a/XUnitTest/XUnitTest.csproj b/XUnitTest/XUnitTest.csproj
index 5494ee2..ec3b6a0 100644
--- a/XUnitTest/XUnitTest.csproj
+++ b/XUnitTest/XUnitTest.csproj
@@ -11,11 +11,11 @@
</PropertyGroup>
<ItemGroup>
- <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.7" />
+ <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.8" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
- <PackageReference Include="NewLife.XCode" Version="11.25.2026.403" />
+ <PackageReference Include="NewLife.XCode" Version="11.26.2026.509" />
<PackageReference Include="Moq" Version="4.20.72" />
- <PackageReference Include="NewLife.Core" Version="11.15.2026.501" />
+ <PackageReference Include="NewLife.Core" Version="11.15.2026.517-beta0720" />
<PackageReference Include="NewLife.UnitTest" Version="1.1.2026.102" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">