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

StackOverflow https://stackoverflow.com/questions/201004

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

ОБНОВЛЯТЬ:

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

Другие советы

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

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

Сделанный.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top