Что именно мне нужно сделать, чтобы разместить службу WCF в IIS 7.0 с помощью netTcpBinding? - PullRequest
7 голосов
/ 09 июля 2009

Я больше недели безуспешно пытался разместить очень простой HelloWorld-подобный wcf-сервис, используя netTcpBinding.

С http все нормально. Я могу получить доступ к своему сервису даже с удаленной машины. Но с tcp возникают проблемы.

Я выполнил все шаги, которые я должен, чтобы разместить свой сервис в WAS:

  • Включены функции .Net 3.0, включая активацию http и не-http

  • Я предоставил «Сетевая служба» и «IIS_IUSRS» следующие разрешения для папки, содержащей сайт:

    • Чтение и выполнение
    • Список содержимого папки
    • Read
  • Открыты порты 8100 и 8086 в брандмауэре.

  • В IIS Manager / Actions / Bindings устанавливаются следующие привязки:

    • http 8100: *
    • net.tcp 8086: *
  • В IIS Manager / Управление веб-сайтом / Расширенные настройки включены протоколы http и net.tcp.

Первоначальная проблема, с которой я столкнулся, заключалась в том, что я смог получить доступ к службе через http, но при попытке с помощью tcp я получил следующую ошибку:

"Сообщение не может быть отправлено, поскольку адрес службы в адресах конечных точек net.tcp: //myDomain/HelloWorld.Hello.svc 'недоступен для адреса протокола. "

Я нашел сообщение на этом сайте, у автора которого была такая же проблема, и она была решена путем переустановки функций .net 3.0. Я попробовал это. Я также попытался переустановить IIS 7.0 на всякий случай. Сейчас ситуация хуже, чем была в начале. Если я настраиваю конечную точку с помощью tcpBinding в моем Web.Config, я даже не могу получить доступ к своему сервису по его http адресу с помощью IE !! Я получаю следующее сообщение:

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

Файл Web.Config выглядит следующим образом:


       name="HelloWorld.Hello">
       <host>
          <baseAddresses>
             <add baseAddress="http://myDomain:8100/HelloWorld/" />
         <add baseAddress="net.tcp://myDomain:8086/HelloWorld/" />
          </baseAddresses>
       </host>          

       <endpoint address=""
                 binding="wsHttpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="httpInseguro">
       </endpoint>

       <endpoint address=""
                 binding="netTcpBinding"
                 contract="HelloWorld.IHello"
                 bindingConfiguration="netTcpInseguro">
       </endpoint>


       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>
 </services>

<bindings>

  <wsHttpBinding>
    <binding name ="httpInseguro">
      <security mode ="None" />
    </binding>        
  </wsHttpBinding>

  <netTcpBinding>
    <binding name ="netTcpInseguro">
      <security mode ="None" />
    </binding>        
  </netTcpBinding>

</bindings>

и файл .svc выглядит так:

Может ли кто-нибудь дать мне подсказку о том, что происходит? Я действительно не знаю, что еще делать. Это настоящая проблема, потому что использование http-привязки не вариант. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 09 июля 2009

Вам потребуется включить хостинг TCP в WAS, позвонив по номеру appcmd.exe:

%windir%\system32\inetsrv\appcmd.exe set site 
    "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='*']

Ознакомьтесь с документацией MSDN или статьей Мишель Леру Бустаманте по этой теме - она ​​содержит всю необходимую информацию.

Марк

1 голос
/ 13 июля 2009

Спасибо за ваш ответ и за ссылки. Я проверю их. Я забыл сказать, но я уже включил TCP хостинг был. Кто-то предложил мне добавить это в файл конфигурации:

<endpoint address="mextcp" binding="mexTcpBinding" contract="IMetadataExchange"/>

И теперь все работает нормально. С уважением,

Гонсало

...