3

Activator.CreateInstance(type, "http://localhost/blah")Windows 7 の .Net 3.5 でリモート処理を使用してサービスを呼び出すために使用しています。

私が理解している限り、Windows 7 はデフォルトで IPv6 を使用するため (確かに localhost に ping を実行すると ::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 に答える