Почему я не могу подключиться к службе WCF с помощью net.tcp, но могу с помощью http?

У меня есть служба WCF, работающая в IIS с ServiceHostFactory. Он отлично работает с WSHttpBinding, но из-за скорости и того, что все находится в одной сети (без брандмауэров), я хочу немного ускорить работу, используя вместо этого NetTcpBinding.

Когда я пытаюсь это сделать, я получаю эту ошибку:

Не удалось подключиться к net.tcp://zzz.xxx.yyy/MyService.svc. Попытка подключения продолжалась в течение промежутка времени 00:00:01.0464395. Код ошибки TCP 10061: Не удалось установить соединение, поскольку целевая машина активно отказалась от него x.x.x.x:808.

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

binding.Security.Message.ClientCredentialType = MessageCredentialType.None;
binding.Security.Message.ClientCredentialType = TcpClientCredentialType.Windows;,

Также я должен отметить, что я извлекаю довольно много данных из одного из сервисных вызовов, поэтому я также помещаю их (как при попытках http, так и при попытках tcp - установка maxMessageSize на 1000000)

binding.MaxReceivedMessageSize = maxMessageSize;
binding.ReaderQuotas.MaxArrayLength = maxMessageSize;

Должно быть довольно легко заставить его работать, так что же мне не хватает?

ОБНОВЛЕНИЕ: я добавил TCP-порт 808 к удостоверению веб-сайта и повторил попытку. Теперь я получаю эту ошибку:

Вы попытались создать канал для службы, которая не поддерживает .Net Framing. Возможно, вы столкнулись с конечной точкой HTTP.


person Per Hornshøj-Schierbeck    schedule 14.10.2008    source источник


Ответы (7)


Ознакомьтесь с этот пост о включении не-HTTP-привязок в IIS 7.0. По умолчанию вы должны явно включить net.tcp в IIS 7.0.

Надеюсь это поможет.

ОБНОВИТЬ:

Увидел ваш комментарий - к сожалению, net.tcp не поддерживается в IIS 6.0. Ознакомьтесь с этой ссылкой, в которой подробно описаны поддерживаемые привязки WCF для различных хостов ( включая самостоятельное размещение, WAS и IIS). Похоже, в IIS 6.0 работают только привязки HTTP.

person David Mohundro    schedule 14.10.2008
comment
Однако служба размещена на IIS6 :( - person Per Hornshøj-Schierbeck; 14.10.2008
comment
Пересмотрел мой ответ... похоже, что IIS6 не поддерживает ничего, кроме HTTP. Я в той же лодке на работе - мы пока застряли на Win2003 :( - person David Mohundro; 14.10.2008
comment
Ссылка мертва. к вашему сведению. - person CodingYoshi; 11.11.2020
comment
@CodingYoshi Я обновил его, чтобы он указывал на archive.org, похоже, эта ссылка исчезла. - person David Mohundro; 12.11.2020

Если вы используете Vista, убедитесь, что службы адаптера прослушивателя WAS и Net.Tcp запущены.

person Community    schedule 23.04.2009
comment
+1 Эта служба адаптера прослушивателя Net.Tcp по какой-то причине была отключена: / ура. - person Andreas Grech; 27.05.2009
comment
Мне также пришлось запустить службу общего доступа к портам Net.Tcp, так как это была зависимая служба. Оба были инвалидами. - person RandomEngy; 23.07.2011
comment
WAS расшифровывается как служба активации оконных процессов. - person Rubens Mariuzzo; 03.09.2013

Для тех, кто наткнется на это, мое руководство по устранению неполадок net.tcp WCF, подобных этому:

  1. Убедитесь, что net.tcp является включенным протоколом для веб-сайта (в IIS щелкните сайт правой кнопкой мыши, перейдите к дополнительным параметрам и убедитесь, что включенные протоколы включают «net.tcp»
  2. Я не уверен, что это паранойя, мне также всегда нужно было включать net.tcp для сайта через командную строку, а также шаг 1. Откройте командную строку и из c:\windows\system32\inetsrv введите appcmd.exe set app "NameOfWebsite/" /enabledProtocols:http,net.tcp
  3. Убедитесь, что в привязках веб-сайта в IIS есть запись для net.tcp и что вы привязали его к правильному номеру порта (я использую 9000:* в качестве привязки к порту 9000). Также убедитесь, что никакие другие веб-сайты в IIS не используют ту же привязку net.tcp к этому порту.
  4. Убедитесь, что служба «Адаптер прослушивателя Net.TCP» запущена.

Сделанный.

person Matt Roberts    schedule 16.03.2012
comment
Спасибо! 1,2 и 3 были на месте, но не 4. У меня не работал сетевой адаптер прослушивателя TCP (и зависимые службы)! Убедитесь, что запущены службы активации процессов Windows, совместное использование портов NET TCP и адаптер прослушивателя Net TCP. - person Dominic Zukiewicz; 26.03.2012
comment
№3 Мне помогло. У меня было два сайта, использующих net.tcp:808. Несмотря на то, что второй сайт был полностью отключен, он не работал!! Это единственное место, где я видел, что порты net.tcp нельзя использовать на разных сайтах. Отличная информация! - person P.Brian.Mackey; 22.06.2013
comment
Для меня это было очевидно, но чтобы добавить net.tcp, просто введите его в текстовое поле (список, разделенный запятыми). - person Jess; 06.02.2014

Как только я запускаю службу адаптера прослушивателя Net.Tcp, служба у меня работает нормально.

person rosi    schedule 15.10.2010

Может ли это быть что-то столь же простое, как правила вашего брандмауэра на хосте службы, запрещающие порт 808?

person ZombieSheep    schedule 14.10.2008
comment
Я только что дважды проверил, и нет никаких брандмауэров, блокирующих внутренний трафик, но спасибо. - person Per Hornshøj-Schierbeck; 14.10.2008

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

person amitdotchauhan    schedule 13.12.2010

У меня также была эта проблема на Windows Server 2008 R2.

Просто убедитесь, что служба совместного использования портов Net.Tcp также запущена, так как она зависит от адаптера прослушивателя Net.Tcp.

person Werner Bisschoff    schedule 30.03.2015