このアプリケーションは、他のシステムが.net remotingを使用して接続するための独自のアドレスを公開します。私はそれがthis RFCごとにコロンで混乱した場合には、角括弧を追加.net remotingのためにuriにipv6アドレスにゾーンインデックスを含める(またはゾーンインデックスを含まない)方法
IPAddress[] IPList = Dns.GetHostEntry(Environment.MachineName).AddressList;
string ipAddress = IPList[ipIndex].ToString();
if(ipAddress.contains(":"))
{
// ip6 address
url = "tcp://[" + ipAddress + "]:" + port + "/" + name;
}
else
{
url = "tcp://" + ipAddress + ":" + port + "/" + name;
}
:それはのようなもので、コンピュータのすべてのアドレスを取得します。私は問題がゾーンインデックスだと思う - ToString()
返すfe80::a8e8:2b42:3c07:c04a%10
- %10
ゾーンインデックスに注意してください。ゾーンインデックスをURLに入れることはできますか? thisによると、それらは問題を引き起こす?ゾーンインデックスが必要ですか? IPアドレスからuriをアセンブルする方がいいですか?
編集:私は、リンクローカルアドレス、ループバックおよびマルチキャストアドレスを無視するようにコードを変更し、有効なアドレスを見つけるための答えを1として
- これはWindows7の例では、これらを除外します。
IPList[ipIndex].IsIPv6LinkLocal || IPList[ipIndex].IsIPv6Multicast || IPAddress.IsLoopback(IPList[ipIndex])
私は今、誰かが実際のIPv6アドレス窓と、このソフトウェアを使用している場合、ゾーンインデックスまたは他の私が構築したURLが壊れるものとしてアドレスを報告しないことを想定しています。私はIPAddress、ポートなどを入力として使用できる既存の.net URLビルディングクラス、またはリモーティングクライアントをActivator.GetObjectで必要とされる文字列URLの代わりにIPAddressクラスに接続するためのより良い方法を望んでいましたこれは今のところできます。
これは、IPv6アドレスを確認する良い方法ではありません。 IPAddressクラスには、IPv6アドレスを示すAddressFamily.InterNetworkV6を含むenumであるAddressFamilyプロパティが含まれています – blowdart