Подтвердить что ты не робот

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

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

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

Не удалось подключиться к net.tcp://zzz.xxx.yyy/MyService.svc. Попытка подключения продолжалась в течение промежутка времени 00: 00: 01.0464395. Код ошибки 10061 TCP: соединение не может быть выполнено, потому что целевой компьютер активно отказался от него 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;

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

UPDATE: я добавил порт TCP 808 к идентификатору веб-сайта и повторил попытку. Теперь я получаю эту ошибку:

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

4b9b3361

Ответ 1

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

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

UPDATE:

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

Ответ 2

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

Ответ 3

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

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

Готово.

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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