Служба WCF, размещенная на IIS, с недоступной привязкой net.tcp - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь разместить службу WCF с привязкой net.tcp на сайте IIS 7.5 в Windows 7, 64-разрядная версия. К сожалению, услуга недоступна. На самом деле, открытие соединения с TCP-портом с помощью telnet даже не удается.

Вот как выглядит мой раздел system.serviceModel web.config для сайта:

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultServiceBehavior">
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2000000" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="DefaultServiceBehavior" 
               name="FooService">
        <endpoint binding="netTcpBinding" bindingConfiguration="service" 
                  name="service" contract="IFoo" />
        <endpoint binding="mexTcpBinding" 
                  bindingConfiguration="DuplexBinding" contract="IFoo" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://127.0.0.1:9000/service"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="service" portSharingEnabled="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                        maxArrayLength="16384" maxBytesPerRead="4096" 
                        maxNameTableCharCount="16384" />
          <security mode="None"/>
        </binding>
        <binding name="DuplexBinding">
          <reliableSession enabled="true"/>
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
</system.serviceModel>

В IIS Manager я создал сайт с пулом приложений, работающим под идентификатором NETWORK SERVICE, с v4.0 .NET Framework и интегрированным конвейером. Для сайта существует одна привязка с типом net.tcp и «Информация о привязке», установленная на 9000:*.

Под службами моего компьютера я запустил ранее остановленные службы «Net.Tcp Listener Adapter» и «Net.Tcp Port Sharing Service» и заставил их запускаться автоматически. Я также удостоверился, что установлена ​​«Активация Windows HTTP Foundation без HTTP».

Что еще мне нужно сделать, чтобы заставить IIS / WCF / WAS / что-либо прослушивать порт 9000, чтобы моя служба могла быть активирована и вызвана?

Мой вопрос похож на Служба WCF хоста с привязкой net.tcp через IIS Manager 7.5 , но OP не был зарегистрирован, и на его вопрос не было ответа. Я открываю этот вопрос, чтобы я мог опубликовать свои собственные данные.

Обновление

Я нашел несколько дополнительных подсказок. Я решил добавить вторую привязку, чтобы я мог работать с привязками HTTP, пытаясь выяснить проблемы net.tcp. Теперь, когда я пытаюсь получить доступ к конечной точке HTTP, я получаю эту ошибку

Не удалось найти базовый адрес, который соответствует схеме net.tcp для конечной точки с привязкой NetTcpBinding. Схемы зарегистрированных базовых адресов: [http]

Я очень четко имею привязок для HTTP и net.tcp здесь:

<baseAddresses>
    <add baseAddress="net.tcp://localhost:9000/"/>
    <add baseAddress="http://localhost:8050/"/>
</baseAddresses>

Так что фраза «Схемы зарегистрированных базовых адресов» меня беспокоит; Что мне нужно сделать, чтобы мой сайт поддерживал схему net.tcp?

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

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

В дополнительных настройках сайта IIS есть настройка «Включенные протоколы». Ранее оно было установлено на http. Изменив его на http, net.tcp, я могу подключиться к порту TCP.

0 голосов
/ 28 февраля 2012

Поскольку вы используете IIS, я бы вообще отбросил узел baseAddress , поскольку IIS будет выводить базовый адрес из настроенных вами привязок / виртуального пути.

Также имейте в виду, что WCF не будет рад атрибуту httpGetEnabled="true" в поведении ваших метаданных без доступных конечных точек http.

0 голосов
/ 11 ноября 2011

Я бы попробовал предложение С.С. Самры.Я думаю, что ваш базовый адрес и URL, который вы пытаетесь использовать, скорее всего, неверны.Мой выглядит примерно так:

net.tcp: // localhost: PORT / ServiceNamespace / ClassName.

0 голосов
/ 09 ноября 2011

Похоже, вы сделали большинство вещей правильно.

Наиболее вероятная проблема, которая остается, - это брандмауэр.Что стандартный брандмауэр Windows блокирует порт 9000.

...