DSTCPServerTransport.pas 中的“procedure TDSTCPChannel.Open”方法在分配“FChannelInfo”时使用连接用户的私有IP 地址。当我跟踪 HTTP 传输时,它使用了用户的公共 IP。如果 DSTCPServerTransport.pas 已更新,则
FChannelInfo := TDBXSocketChannelInfo.Create(Integer(FContext.Connection), FContext.Connection.Socket.Binding.IP);
改为
FChannelInfo := TDBXSocketChannelInfo.Create(Integer(FContext.Connection), FContext.Connection.Socket.Binding.PeerIP);
然后 DSTCPServerTransport.pas 将匹配 HTTP 传输实现,并且连接的用户的公共 IP 地址也将通过 TCP 连接的“DSConnectEventObject.ChannelInfo.Info”在 TDSServer.OnConnect 事件中可用。一些开发人员在这两个 EBT 讨论中讨论了这一点:讨论 #1,讨论 #2。QC# 是#91030。
我尝试自己进行更改,但了解到我无法重新编译 DataSnap 框架(请参阅此处)。
这会在 XE2 中修复和/或最终用户能否在 XE2 中重新编译 DataSnap 框架?XE2 之前是否会有包含此修复的 DataSnap 补丁?
谢谢,詹姆斯