Почему я не могу подключиться к службе 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.
Решение
Проверить эта почта о включении привязок, отличных от 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:
- Убедитесь, что net.tcp является включенным протоколом для веб-сайта (в IIS щелкните сайт правой кнопкой мыши, перейдите к дополнительным настройкам и убедитесь, что в списке «Включенные протоколы» указан «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» запущена.
Сделанный.
Как только я запускаю службу адаптера прослушивателя Net.Tcp, служба у меня работает нормально.
Может ли это быть что-то простое, например, правила брандмауэра на узле службы, запрещающие порт 808?
проверьте, есть ли в IIS оба протокола, указывающие на один и тот же номер порта. Я только что обнаружил, что в этом случае это не сработает.
У меня также была эта проблема на Windows Server 2008 R2.
Просто убедитесь, что служба общего доступа к портам Net.Tcp также запущена, поскольку она зависит от адаптера прослушивателя Net.Tcp.