我正在使用Activator.CreateInstance(type, "http://localhost/blah")
Windows 7 上的 .Net 3.5 中的远程调用服务。
据我了解,Windows 7 默认使用 IPv6(当然,如果我 ping localhost,它会解析为 ::1)所以我希望这个 URL 能够建立 IPv6 连接,但在我的测试中,它总是以 IPv4 连接
如何在我想使用 IPv6 的远程处理 URL 中指定?
发生这种情况是因为 .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);
有关详细信息,请参阅此博客文章。