将.Net远程处理与ipv6结合使用

将.Net远程处理与ipv6结合使用,.net,remoting,ipv6,.net,Remoting,Ipv6,我正在使用Activator.CreateInstance(类型,“http://localhost/blah“”在Windows 7上使用.Net 3.5中的远程处理调用服务 据我所知,Windows 7默认情况下将使用IPv6(当然,如果我ping localhost,它将解析为::1),因此我希望此URL建立IPv6连接,但在我的测试中,它始终以IPv4连接 如何在远程处理URL中指定要使用IPv6?这种情况发生的原因是.net远程处理服务器默认侦听IPv4。如果您的网络配置为同时使用IP

我正在使用
Activator.CreateInstance(类型,“http://localhost/blah“”
在Windows 7上使用.Net 3.5中的远程处理调用服务

据我所知,Windows 7默认情况下将使用IPv6(当然,如果我ping localhost,它将解析为::1),因此我希望此URL建立IPv6连接,但在我的测试中,它始终以IPv4连接


如何在远程处理URL中指定要使用IPv6?

这种情况发生的原因是.net远程处理服务器默认侦听IPv4。如果您的网络配置为同时使用IPv6和IPv4,Windows 7将首先将主机名解析为IPv6,然后解析为IPv4,这是远程处理服务器侦听的默认地址

所以,为了使用IPv6 URL,您必须将远程处理服务器设置为也在IPv6上侦听。如果您正在使用app.config,请执行以下操作:

<system.runtime.remoting>
  <application>
    <service>
      <wellknown mode="Singleton" type="MyApplication.MyServer, MyAssembly" objectUri="MyServer" />
    </service>
    <channels>
      <channel ref="tcp" name="tcp6" port="9000" bindTo="[::]" />
      <channel ref="tcp" name="tcp4" port="9000" bindTo="0.0.0.0" />
    </channels>
  </application>
</system.runtime.remoting>

有关更多信息,请参阅。

可能正在尝试禁用网卡上的IPv4,并查看它现在是否使用IPv6?(只是为了证明是否可以使用V6,而不是作为最终解决方案)。我现在再次回顾这一点。我发现使用http://[::1]/将使用IPv6,所以我知道远程处理本身并没有禁用IPv6。这似乎只是名称查找中的一些有趣的事情。但是ping和web浏览器将按照预期解析与IPv6相同的主机名
IDictionary properties = new Hashtable();
properties["name"] = "tcp6";
properties["port"] = 9000;
properties["bindTo"] = "[::]";
TcpServerChannel channel = new TcpServerChannel(properties, null);
ChannelServices.RegisterChannel(channel,  false);