IPv6 アドレスを取得して .NET WSE SoapTcpTransport.GetInputChannel、具体的には GetInputChannel を内部で使用する SoapReceivers.Add を使用する際に問題が発生しています。地球上でこの問題を抱えている人は他にいないので、私は何か間違ったことをしていると思います。
IPv4 アドレスとポート (soap.tcp://192.168.0.198:9063) を使用して SOAP 入力チャネルを作成すると、すべて問題ないように見えます。同じネットワーク アダプター (soap.tcp://[fe80::c450:7142:67f5:ad66%11]:9063) に IPv6 アドレスを使用すると、SoapTcpTransport.GetInputChannel は例外をスローします: 「System.ArgumentException: WSE813:次のトランスポート アドレスをローカル ネットワーク インターフェイスにマップできませんでした: soap.tcp://[FE80:0000:0000:0000:C450:7142:67F5:AD66]:9063/..”</p>
2 つの唯一の違いは、Uri が IPv4 または IPv6 アドレスで作成されることです。どちらのアドレスも ping に応答します。この動作は、Microsoft.Web.Services2 と 3 の両方で同じです。問題を再現する MS 単体テストを入手しました。
[TestMethod]
public void ShouldConstructInputChannelWithIpv6Address_Selfcontained()
{
Uri via = new Uri("soap.tcp://[fe80::c450:7142:67f5:ad66%11]:9063");
EndpointReference receiveEndpoint = new EndpointReference(via);
SoapTcpTransport soapTransport = new SoapTcpTransport();
ISoapInputChannel inputChannel = soapTransport.GetInputChannel(receiveEndpoint, SoapChannelCapabilities.ActivelyListening);
inputChannel.Close();
Assert.IsTrue(true); // If it makes it this far without an exception, then that's progress.
}