IIS8 В net.tcp не прослушивалась конечная точка:

У меня есть узел службы WCF в IIS8, и я хочу использовать привязку net.tcp.

У меня есть эта конфигурация:

Web.config:

<service behaviorConfiguration="MyBehavior"
  name="DecryptService.EmailCenterDecryptTCP">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://XX.XX.XX.XX:808/VirtualFolder/Service.svc" />
      </baseAddresses>
    </host>

    <endpoint address=""
          binding="netTcpBinding"
          bindingConfiguration="portSharingBinding"
          name="MyServiceEndpoint"
          contract="ServiceNamespace.IService">
    </endpoint>

    <endpoint address="mextcp"
          binding="mexHttpBinding"
          bindingConfiguration=""
          name="MyServiceMexTcpBidingEndpoint"
          contract="IMetadataExchange" />
</service>

Когда я пытаюсь использовать службу на том же компьютере, что и IIS8, со следующей конфигурацией работает нормально:

<client>
        <endpoint address="net.tcp://YY.YY.YY.YY:808/VirtualFolder/Service.svc"
            binding="netTcpBinding" bindingConfiguration="MyServiceEndpoint"
            contract="ServiceReference1.IService" name="MyServiceEndpoint" />
    </client>

YY.YY.YY.YY — это локальный IP-адрес машины, но когда я пытаюсь использовать службу на другой машине, YY.YY.YY.YY меняется на внешний IP-адрес машины (ZZ.ZZ.ZZ.ZZ), на которой работает IIS8. Я получаю следующую ошибку:

There was no endpoint listening at net.tcp://ZZ.ZZ.ZZ.ZZ/VirtualFolder/Service.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

Любые идеи? Спасибо и извините за мой плохой английский

ИЗМЕНИТЬ:

Я сделал консольное приложение, на котором запущен ServiceHost, заменяющий IIS, и с этой конфигурацией оно работает через Интернет.

var svh = new ServiceHost(typeof (Service));
svh.AddServiceEndpoint(typeof (ServiceNamespace.IService), new NetTcpBinding(SecurityMode.None), "net.tcp://serverLocalIp:808");
svh.Open();

Console.WriteLine("SERVER - Running...");
stopFlag.WaitOne();

Console.WriteLine("SERVER - Shutting down...");
svh.Close();

Console.WriteLine("SERVER - Shut down!");

Есть идеи, что не так с тем, что IIS запускает ту же службу через Интернет? локально работает. Спасибо


person Sergio Figueiredo    schedule 05.04.2013    source источник


Ответы (3)


Вам также необходимо настроить IIS для получения соединения Net.TCP.

Под Advanced Settings вашего приложения IIS, затем под Enabled Protocols убедитесь, что у вас есть http,net.tcp обратите внимание, что места нет, если у вас есть место, это не удастся.

http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx

person Middas    schedule 05.04.2013
comment
Но если у меня есть пробел в «http,net.tcp», он не должен давать сбоев даже для локальных вызовов? - person Sergio Figueiredo; 06.04.2013
comment
Я проверил IIS, и у меня все в порядке. Проблема в том, что если я вызываю службу с того же компьютера, на котором работает IIS8 (localhost), все работает нормально, но когда я вызываю ту же службу за пределами машины, на которой работает IIS, я получаю эту ошибку - person Sergio Figueiredo; 08.04.2013
comment
Похоже, брандмауэр блокирует вас тогда. - person Middas; 08.04.2013
comment
я сделал консольное приложение с помощью ServiceHost и запустил его на том же компьютере, что и IIS8, и с самостоятельным сервисом он работает ... может быть, что-то с адресом? - person Sergio Figueiredo; 10.04.2013

Если однажды вы начали получать эту ошибку ни с того ни с сего, это связано с тем, что другой процесс захватывает порт net.tcp. В моем случае это был порт 808. Вот как я понял это примерно через 3 дня - это то, чем я сейчас занимаюсь, гуглю и пытаюсь выяснить чужие ошибки вместо того, чтобы делать свою собственную работу.

Во всяком случае:


  1. Net.TCP зависит от двух запущенных служб Windows. Перейдите к службам и найдите Адаптер прослушивателя Net.Tcp и Служба совместного использования портов Net.Tcp. Если вы их не видите, этот ответ к вам не относится. Это означает, что вы не активировали функцию в панели управления Включить или отключить функцию Windows. Вы найдете много информации о том, что включить в Интернете.
  2. Остановите Службу совместного использования портов Net.Tcp и нажмите Да во всплывающем окне Остановить другие службы.
  3. Перезапустите обе службы.
  4. Откройте Средство просмотра событий > Журналы Windows > Система и посмотрите, нет ли ошибок для SMSvcHost 4.0.0.0 (ваша версия может отличаться) в Источнике. столбец. У меня была следующая ошибка: Произошла ошибка в службе активации NetTcpActivator протокола net.tcp при попытке прослушивания сайта 1, поэтому протокол временно отключен для сайта. Да, спасибо, MS! Вы запустили службу, но на самом деле не запускали ее, а просто добавили сообщение в средство просмотра событий? Большой! Потому что сказать мне во время запуска службы Windows слишком сложно, верно? Хорошо еще раз, в любом случае, давайте продолжим.
  5. Then I needed to figure out what is using the port as per error in 4 above. So I ran the following commands (You may need to start the command prompt in admin mode.)
    • Run netstat -ano | findstr "808" and note the numbers in the column. Those are process IDs using the port.
    • Запустить список задач | 9, где 9 – идентификатор процесса из предыдущего шага.
  6. Теперь, когда вы знаете имя процесса, использующего порт, вам нужно поискать в Google и выяснить, для чего этот процесс. В моем случае это было связано с графическим драйвером Intel, использующим порт 808: OneApp.IGCC.WinService.exe.

Это имеет смысл, потому что какой-то другой процесс уже использовал порт 808, поэтому он был недоступен для Net.TCP.


На тот момент у меня было 2 варианта:

  1. Отключить этот процесс
  2. Возможно, посмотрите, смогу ли я изменить порт для него.

К счастью, у них уже есть обновление для драйвера, поэтому я просто скачал его и установил с здесь.


Перезагрузитесь, затем снова запустите следующие команды, чтобы убедиться, что порт свободен для net.tcp:

  1. Запустите netstat -ano | findstr 808 и обратите внимание на числа в столбце. Это идентификаторы процессов, использующих порт.
  2. Запустить список задач | 9, где 9 – идентификатор процесса из предыдущего шага. Теперь вы должны увидеть SMSvcHost.exe, что нам и нужно.

person CodingYoshi    schedule 11.11.2020
comment
Спасибо Йоши. Я потратил много времени, чтобы выяснить проблему, но не повезло, и ваш ответ решил мою проблему. - person Rizwan; 12.01.2021
comment
Я попрошу автора вопроса отметить это как ответ, чтобы другим было полезно. - person Rizwan; 12.01.2021

Простой ответ, измените номер порта в IIS -> изменить привязки -> net.tcp на что-то другое. Я изменил его на 12345, и это решило мою проблему.

Это проблема, связанная с другим процессом, использующим порт 808 по умолчанию, как описано в сообщении выше. Если это не помогает, проверьте ответ выше и следующую процедуру.

person Willow    schedule 29.11.2020