У меня возникла проблема с получением адресов IPv6 для работы с .NET WSE SoapTcpTransport.GetInputChannel или, более конкретно, SoapReceivers.Add, который использует GetInputChannel под обложками. Поскольку никто на планете, похоже, не сталкивался с этой проблемой, я предполагаю, что я делаю что-то неправильно.IPv6 и SoapTcpTransport.GetInputChannel (WSE)
Если я создаю входной канал SOAP с использованием IPv4-адреса и порта (soap.tcp: //192.168.0.198: 9063), тогда все выглядит просто отлично. Когда я использую IPv6-адрес для того же сетевого адаптера (soap.tcp: // [fe80 :: c450: 7142: 67f5: ad66% 11]: 9063), то SoapTcpTransport.GetInputChannel выдает исключение: «System.ArgumentException: WSE813: Следующий транспортный адрес не может быть сопоставлен с локальным сетевым интерфейсом: soap.tcp: // [FE80: 0000: 0000: 0000: C450: 7142: 67F5: AD66]: 9063/.. "
Единственная разница между ними состоит в том, что 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.
}
Я задал этот same question on the MSDN forums.