NewLife/NewLife.Remoting

修复响应消息重复解码及缓冲区脏读问题

增加对 Reply 消息的判断,避免重复解码和提前归还 ArrayPool 缓冲区,防止并发解码时出现脏数据。补充详细注释说明处理原因。
大石头 authored at 2026-05-18 16:51:06
1bcf15f
Tree
1 Parent(s) 33544c3
Summary: 11 changed files with 25 additions and 21 deletions.
Modified +1 -1
Modified +1 -1
Modified +4 -0
Modified +1 -1
Modified +5 -5
Modified +2 -2
Modified +3 -3
Modified +3 -3
Modified +1 -1
Modified +1 -1
Modified +3 -3
Modified +1 -1
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>
Modified +1 -1
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" />
Modified +4 -0
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
         {
Modified +1 -1
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>
Modified +5 -5
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>
Modified +2 -2
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>
Modified +3 -3
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>
Modified +3 -3
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>
Modified +1 -1
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>
Modified +1 -1
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" />
Modified +3 -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">