Из-за отсутствия четких ответов я решил сам найти лучшее решение. Вот что нужно сделать, чтобы настроить конечную точку службы WCF NET TCP в IIS 7.0.
Для этого нам понадобится два шага:
- Настройка файла конфигурации для конечной точки WCF net tcp
- Настройка IIS для net tcp
1. Сконфигурировать файл конфигурации для конечной точки WCF net tcp
Ниже приведен типичный файл конфигурации, обратите внимание, что значение "address" в конечной точке службы пусто.
Также обратите внимание, что внутри узла "хост" я добавляю 2 базовых адреса, протокол http и net tcp соответственно. Поскольку служба размещена в IIS, вам не нужно беспокоиться об абсолютном адресе в конечной точке, IIS вычисляет это на основе базового адреса, который мы определили внутри узла "host".
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="behaviorConfig">
<!--your custom behavior here-->
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBindingConfig"/>
</basicHttpBinding>
<netTcpBinding>
<!--our netTcpBinding binding-->
<binding name="netTcpBindingConfig"/>
</netTcpBinding>
</bindings>
<services>
<service name="MyNamespace.ServiceLayer.MyService" behaviorConfiguration="behaviorConfig">
<!--Endpoint for basicHttpBinding-->
<endpoint address="" binding="basicHttpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="basicHttpBindingConfig"/>
<!--Endpoint for netTcpBindingConfig-->
<endpoint address="" binding="netTcpBinding" contract="MyNamespace.ServiceLayer.IMyService" bindingConfiguration="netTcpBindingConfig">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<!--Make sure you add a mexTcpBinding, without it you will receive an error when trying to resolve service's reference-->
<endpoint address="mex"
binding="mexTcpBinding"
bindingConfiguration=""
name="MyServiceMexTcpBidingEndpoint"
contract="IMetadataExchange" />
<host>
<!--This part is important for IIS to determine the base addresses for your endpoints-->
<baseAddresses>
<!--Notice that baseAddress for net tcp is preceded by net.tcp -->
<!--then ://localhost:{port} -->
<!--Also the same for http, so you can figure out how to define a baseAddress for https-->
<add baseAddress="net.tcp://localhost:8090"/>
<add baseAddress="http://localhost:8080"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
2. Настройте IIS для net tcp
В IIS (после обновления службы до новой конфигурации) включите протокол net.tcp. Это шаги:
- Открыть IIS.
- В списке сайтов найдите свой "сайт", на котором размещен ваш wcf, затем щелкните по нему правой кнопкой мыши
- затем выберите «Редактировать привязки»,
- появится список привязок (убедитесь, что там нет net.tcp), затем добавьте свою конфигурацию net.tcp,
- нажмите «Добавить»,
- Введите net.tcp (или выберите net.tcp из выпадающего списка, если он доступен)
- в привязке Тип информации: 8090: * (убедитесь, что это тот же порт, что и в хосте> базовый адрес, который вы добавили)
- затем закройте это окно и перезапустите службу.
После этого есть еще одна конфигурация:
- Открыть IIS
- В списке сайтов найдите свой "сайт", на котором размещен ваш wcf, затем щелкните по нему правой кнопкой мыши
- Нажмите «Расширенные настройки»
- Выбрать включенные протоколы
- Установите значение http, net.tcp (убедитесь, что между http, net.tcp нет пробелов)
- Перезапустите сервис
Кроме того, если вы все еще не можете получить доступ к сервису, вам может потребоваться запустить адаптер прослушивателя Net.tcp на вашем сервере. Для этого выполните следующие действия:
- Перейдите в ServerManager -> Конфигурация -> Службы, остановите адаптер прослушивателя Net.Tcp и Службу совместного использования портов Net.Tcp. Затем запустите их снова.
Это все, что вам нужно сделать, чтобы конечная точка WCF nettcp была включена в IIS.
Надеюсь, это поможет.
Привет