使用.Net远程处理与ipv6

时间:2013-01-25 12:53:38

标签: .net remoting ipv6

我正在使用Activator.CreateInstance(type, "http://localhost/blah")在Windows 7上使用.Net 3.5中的远程处理来调用服务。

据我了解,Windows 7默认使用IPv6(当然,如果我ping localhost它解析为:: 1),所以我希望这个URL建立IPv6连接,但在我的测试中,它总是连接作为IPv4

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

1 个答案:

答案 0 :(得分:2)

这是因为.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>

或以编程方式配置:

IDictionary properties = new Hashtable();
properties["name"] = "tcp6";
properties["port"] = 9000;
properties["bindTo"] = "[::]";
TcpServerChannel channel = new TcpServerChannel(properties, null);
ChannelServices.RegisterChannel(channel,  false);

有关详细信息,请参阅this blog post