IPv6 и SoapTcpTransport.GetInputChannel (WSE)

У меня возникла проблема с получением IPv6-адресов для работы с .NET WSE SoapTcpTransport.GetInputChannel или, точнее, SoapReceivers.Add, который использует GetInputChannel незаметно. Поскольку, похоже, ни у кого на планете нет этой проблемы, я предполагаю, что я делаю что-то не так.

Если я создаю входной канал 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. Оба адреса отвечают на пинг. Это поведение одинаково для 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.


person William Randlett    schedule 22.07.2009    source источник


Ответы (1)


Я прошу прощения. Я как-то упустил ваш вопрос. Я ответил на него на форуме ASMX:

Просто чтобы убедиться: известно ли вам о "WSE устарела - используйте только при необходимости"?

person John Saunders    schedule 22.07.2009