IPv6和SoapTcpTransport.GetInputChannel(WSE)

时间:2009-07-22 12:49:34

标签: .net ipv6 wse

我在使用.NET WSE SoapTcpTransport.GetInputChannel或更具体的SoapReceivers.Add(使用GetInputChannel)获取IPv6地址时遇到问题。由于地球上没有其他人似乎有这个问题,我认为我做错了什么。

如果我使用IPv4地址和端口(soap.tcp://192.168.0.198:9063)创建SOAP输入通道,那么一切似乎都很好。当我将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

1 个答案:

答案 0 :(得分:0)

我道歉。我不知何故错过了你的问题。我在ASMX论坛上回答了这个问题:

  

只是为了确保:你知道“WSE is Obsolete - Use Only If Necessary”吗?