Почему я не могу подключиться к службе WCF с помощью net.tcp, а могу с помощью http? - PullRequest
21 голосов
/ 14 октября 2008

У меня есть служба 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.

Ответы [ 7 ]

23 голосов
/ 23 апреля 2009

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

15 голосов
/ 16 марта 2012

Для всех, кто сталкивается с подобными проблемами, мое руководство по устранению неисправностей по 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» работает.

Готово.

15 голосов
/ 14 октября 2008

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

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

UPDATE:

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

7 голосов
/ 15 октября 2010

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

1 голос
/ 30 марта 2015

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

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

1 голос
/ 13 декабря 2010

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

1 голос
/ 14 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...