You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Remoting客户端激活跨网失效,服务器端激活正常求助

问题分析与解决方案

针对你遇到的.NET Remoting客户端激活模式跨网调用失败的问题,核心原因在于客户端激活模式下,服务器返回的远程对象代理地址可能是内网IP或localhost,导致跨网客户端无法访问,以下是具体分析和解决措施:

可能原因1:服务器TCP通道未绑定到对外可访问的IP

默认情况下,.NET Remoting的TCP通道可能优先绑定内网IP或localhost。当跨网客户端通过机器名/公网IP连接服务器8989端口创建对象后,服务器返回的代理中包含自身绑定的内网IP,客户端后续调用方法时会尝试连接这个不可访问的IP,从而触发Socket超时错误。

解决办法

修改服务器端客户端激活模式的配置,在TCP通道中添加bindTo属性,指定服务器的跨网可访问固定IP:

<configuration>
  <system.runtime.remoting>
    <application>
      <service>
        <activated type="MathLibrary.MathLibrary, MathLibrary"/>
      </service>
      <channels>
        <!-- 替换为你的服务器对外固定IP -->
        <channel ref="tcp" port="8989" bindTo="192.168.x.x" />
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>

可能原因2:客户端激活的动态端口转发限制

虽然你关闭了本地防火墙,但跨网环境中的路由器、网关可能限制了动态端口的转发。客户端激活模式下,服务器可能为每个远程对象分配动态端口,这些端口未被路由规则放行,导致方法调用失败。

解决办法

配置服务器TCP通道使用固定端口范围,并确保该范围在网关/路由器中被放行:

<channel ref="tcp" port="8989" bindTo="你的服务器IP" portRange="10000-10100" />

可能原因3:Hosts文件映射错误

确认客户端Hosts文件中machinename对应的IP是服务器的跨网可访问IP,而非内网IP。如果映射的是内网IP,跨网客户端创建对象时可能通过其他方式成功,但后续调用会指向内网IP导致失败。

验证方式

在客户端执行ping machinename,检查返回的IP是否为服务器的对外固定IP。


内容的提问来源于stack exchange,提问作者rotabor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:28:37