3

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

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

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

4

1 回答 1

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);

有关详细信息,请参阅此博客文章

于 2013-06-11T11:19:00.813 回答