У нас есть служба WCF с несколькими клиентами для планирования операций между клиентами. Он отлично справился с XP. Переходя к win7, я могу подключить клиента только к серверу на одном компьютере. На данный момент, я думаю, что это связано с IPv6, но я в тупике о том, как действовать.Проблемы WCF Duplex net.tcp на win7
Клиент пытается подключиться к удаленному серверу, дает следующее исключение:
System.ServiceModel.EndpointNotFoundException: Не удалось подключиться к Net.Tcp: //10.7.11.14: 18297/Zetec/Услуги/SchedulerService/Scheduler. Попытка подключения продолжалась в течение промежутка времени 00: 00: 21.0042014. Код ошибки 10060 TCP: попытка подключения завершилась неудачно, потому что связанная сторона не ответила должным образом после определенного периода времени или установив соединение не удалось, потому что подключенный хост не смог ответить 10.7.11.14:18297. ---> System.Net.Sockets.SocketException: попытка подключения завершилась неудачно, потому что связанная сторона не ответила должным образом через какое-то время или не удалось установить соединение, потому что подключенный хост не смог ответить 10.7.11.14:18297
служба настроена таким образом:
<system.serviceModel>
<services>
<service
name="SchedulerService"
behaviorConfiguration="SchedulerServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost/zetec/Service/SchedulerService"/>
</baseAddresses>
</host>
<endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
binding="netTcpBinding"
bindingConfiguration = "ConfigBindingNetTcp"
contract="IScheduler" />
<endpoint address="net.tcp://localhost:18297/zetec/Service/SchedulerService/Scheduler"
binding="netTcpBinding"
bindingConfiguration = "ConfigBindingNetTcp"
contract="IProcessingNodeControl" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name = "ConfigBindingNetTcp" portSharingEnabled="True">
<security mode="None"/>
</binding>
</netTcpBinding >
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="SchedulerServiceBehavior">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentSessions="100"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
клиент подключается следующим образом:
String endPoint = "net.tcp://" + GetIPV4Address(m_SchedulerHostAddress) + ":" + m_SchedulerHostPort.ToString(CultureInfo.InvariantCulture) + "/zetec/Service/SchedulerService/Scheduler";
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
m_Channel = new DuplexChannelFactory<IProcessingNodeControl>(this, binding, endPoint);
m_IProcessingNodeControl = m_Channel.CreateChannel();
Я проверил мой брандмауэр около десятка раз, но я предполагаю, что может быть что-то я м Иссингом. Пробовал отключить брандмауэр Windows. Я попытался изменить localhost на свой ipv4-адрес, чтобы попытаться держаться подальше от ipv6, я попытался удалить любой анти-ipv6-код.
Не знаю, если это означает что-нибудь, но:
Microsoft Telnet> открытая 10.7.11.14 18297
Подключение к 10.7.11.14 ... Не удалось открыть подключение к узлу, на порт 18297 : Соединиться не удалось
Тесты telnet, к сожалению, похоже, не являются ключевыми. Я успешно подключился к порту моей службы с локального хоста и удаленного компьютера, когда служба работает, но мой клиент не работал с удаленного компьютера.
Похоже, что подключение к localhost не всегда гарантируется. Рабочий стол (win7/32) работает, ноутбук (win7/64) не работает. Однако другие боксы win7/64 работают. Возможно, из-за нескольких ноутбуков на ноутбуке? Также не объясняет сбоев подключения к системам тестировщиков.
Я установил две машины win7 с полностью отключенным IPv6 (используя 0xffffffff, как в http://support.microsoft.com/kb/929852). Нет помощи.
Просто у меня был модный момент лба. У потребителя контракта IScheduler нет проблем с работой на машинах. Клиенты IProcessingNodeControl не подключаются. Они используют практически идентичный код для подключения. Сейчас я думаю, что у них должны быть разные относительные URL-адреса, но это, похоже, не помогает. – Thomas
Итак, я могу наблюдать, как мой клиент терпит неудачу, не удается, не удается подключиться, а затем отключить брандмауэр Windows, и это удается. У моего приложения для хостинга уже есть исключение, что еще нужно для исключения? – Thomas
Net.TCP конечно! – Thomas