WCF Duplex net.tcp выдает на win7 - PullRequest
       27

WCF Duplex net.tcp выдает на win7

4 голосов
/ 12 марта 2010

У нас есть служба WCF с несколькими клиентами для планирования операций среди клиентов.Он отлично работал на XP.Переходя на win7, я могу подключить клиента только к серверу на той же машине.На данный момент я думаю, что это как-то связано с IPv6, но я озадачен тем, как действовать дальше.

Клиент, пытающийся подключиться к удаленному серверу, выдает следующее исключение:

System.ServiceModel.EndpointNotFoundException: Не удалось подключиться к net.tcp: //10.7.11.14: 18297 /Zetec / Услуги / SchedulerService / Scheduler.Попытка подключения продолжалась в течение промежутка времени 00: 00: 21.0042014.Код ошибки TCP 10060: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить 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> open 10.7.11.14 18297
Подключение к 10.7.11.14 ... Не удалось открыть подключение кхост, через порт 18297: Ошибка подключения

Тест telnet, к сожалению, не является ключевым.Я успешно подключился к порту моей службы с localhost и удаленного компьютера, когда служба запущена, но мой клиент не работал с удаленного компьютера.

Похоже, подключение к localhost не всегда гарантируется.Рабочий стол (win7 / 32) работает, ноутбук (win7 / 64) не работает.Другие win7 / 64 коробки работают, хотя.Возможно, из-за нескольких ник на ноутбуке?Также не объясняются сбои подключения в системах тестеров.

Я настроил две машины win7 с полностью отключенным IPv6 (используя 0xffffffff, как в http://support.microsoft.com/kb/929852).Без помощи.

Ответы [ 2 ]

2 голосов
/ 16 марта 2010

У меня нет времени, чтобы вернуться и проверить, является ли это комбинацией помощи, которую я получил от ligos, но основное исправление, по-видимому, заключается в добавлении SMSvcHost.exe к исключениям в брандмауэре Windows.

Большое спасибо за вашу помощь, Лигос. Я был готов сдаться, пока вы не ответили на мой вопрос.

Инструкции по добавлению net.tcp в брандмауэр Windows:

  1. Перейдите в раздел «Службы», найдите службу совместного использования портов net.TCP и дважды щелкните ее. Проведите Путь к исполняемому файлу (не беспокойтесь, если его не все на экране, действие смахивания должно прокрутить его) и скопируйте его (ctrl-c)
  2. Зайдите в брандмауэр и добавьте новую программу, которой будет разрешено общаться через брандмауэр Windows. Вставьте путь из служб и нажмите ОК.
2 голосов
/ 14 марта 2010

Что-то не так с базовым адресом вашего хоста, а затем с адресами конечной точки. У одного есть явная ссылка на порт, у другого нет. Обычно, когда вы используете базовый адрес, вы используете относительный URL в адресе конечной точки.

Не могу понять, почему это связано с IPv6, потому что ни в одном из сообщений об ошибках не упоминаются адреса IPv6.

Возможно, попробуйте еще раз после отключения опции общего доступа к порту net.tcp. Без совместного использования портов вы сможете настроить соединение с помощью telnet, как вы это сделали.

Кроме того, как ваш сервис размещен в Win7? В IIS7 или самостоятельно размещены в службе Windows? Для размещения его в Службе может потребоваться предоставление некоторых разрешений вашему exe-файлу, помимо открытия портов на брандмауэре (как вы иногда делаете это для размещения службы Windows в HTTP в Win XP).

Извините, я спешу и не могу найти URL-адреса для них.

...