0

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.
}

MSDN フォーラムで同じ質問をしました。

4

1 に答える 1