【问题标题】:Using .Net remoting with ipv6使用 .Net 远程处理和 ipv6
【发布时间】:2013-01-09 10:35:45
【问题描述】:

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

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

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

【问题讨论】:

  • 也许尝试在您的网卡上禁用 IPv4 并查看它现在是否使用 IPv6? (只是作为证明是否可以使用 V6,而不是作为最终解决方案)。
  • 我又回来看这个了。我发现使用 http://[::1]/ 将使用 IPv6,所以我知道远程处理本身不会禁用 IPv6。在名称查找中似乎只是一些有趣的事情。但 ping 和 Web 浏览器将按预期解析与 IPv6 相同的主机名

标签: .net remoting ipv6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2010-09-05
    • 2023-04-08
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多