I’m having a problem getting IPv6 addresses to work with the .NET WSE SoapTcpTransport.GetInputChannel or more specifically SoapReceivers.Add, which uses GetInputChannel under the covers. Since no one else on the planet seems to be having this issue, I assume that I’m doing something wrong.
If I create a SOAP input channel using an IPv4 address and port (soap.tcp://192.168.0.198:9063) then everything seems to be just fine. When I use the IPv6 address for the same network adapter (soap.tcp://[fe80::c450:7142:67f5:ad66%11]:9063) then SoapTcpTransport.GetInputChannel throws an exception: “System.ArgumentException: WSE813: The following transport address could not be mapped to a local network interface: soap.tcp://[FE80:0000:0000:0000:C450:7142:67F5:AD66]:9063/..”
The only difference between the two is that the Uri is created with an IPv4 or an IPv6 address. Both addresses respond to ping. This behavior is the same for both Microsoft.Web.Services2 and 3. I’ve got an MS unit test that reproduces the issue:
[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.
}
I have asked this same question on the MSDN forums.