none
хостинг pipe/tcp службы в IIS RRS feed

  • Вопрос

  • Задал уже вопрос в несокольких местах. Никто тупо не отвечает. Может хоть здесь помогут.

    Я хочу хостить свою службу на IIS. Работать должно с tcp и pipe, но как я его ни кручу работать отказывается напрочь. Раньше пробовал публиковать в IIS, не получилось, пытаюсь заставить работать на локальном IIS в студии.
    Проблема в том, что иис как бы игнорирует все мои настройки не относящиеся к http. Т.е. если я добавляю еще один endpoint для http, эта конечная точка прекрасно фурычит, tcp/pipe нет. Если убрать http, вообще ничего не работает.
    Если я прописываю свои настройки для tcp/pipe в простом консольном приложении, все тоже хорошо работает. Поэтому я уверен что дело в IIS или каких-то настройка проекта или WAS или еще чего...
    В общем, я уже голову поломал, помогите какими-нибудь мыслями?

    17 августа 2012 г. 7:27

Ответы

  • Какую версиюю IIS используете? Какой конфигурационный файл службы? Какие ошибки при открытии сервиса в браузере?

    Вот хорошая статья на английском: http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

    В IIS 7 Вам нужно включить поддержку netTcp для виртуальной директории:



    17 августа 2012 г. 8:05
  • Нет, это можно сделать только в IIS правой кнопкой по virtual directory->Advanced Settings; или изменить конфигурационный файл IIS ApplicationHost.config

      <application path="/WASService"
        enabledProtocols="http,net.tcp,net.pipe">
      <virtualDirectory path="/" physicalPath="D:\work\Examples\WasService\WasService" />

     <add baseAddress="net.tcp://localhost:8099/" />

    Еще скорее всего у Вас проблема с портом, в IIS порт по умолчанию для net.tcp-> 808, попробуйте поменять порт с 8099 на 808; либо Вам придется ковырять multiple site bindings. Ну или в IIS для web сайта поменяйте порт с 808 на 8099.


     

    "Если нажать на .svc файл, говорит что не разрешена передача метаданных по http, но оно и правильно я его не включал." Удалите mex конечные точки, чтобы увидеть возможные ошибки с конфигурацией сервиса.

    Включите трассировку на стороне сервера и посмотрите логи. Чтобы это сделать добавьте код ниже в web.config. После этого попробуйте вызвать сервис и посмотрите ошибки активации сервиса в логах.

    <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.XmlWriterTraceListener" name="ServiceModel" initializeData="c:\temp\netclient.svclog">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <trace autoflush="true" />
      </system.diagnostics>





    17 августа 2012 г. 8:59

Все ответы

  • Какую версиюю IIS используете? Какой конфигурационный файл службы? Какие ошибки при открытии сервиса в браузере?

    Вот хорошая статья на английском: http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

    В IIS 7 Вам нужно включить поддержку netTcp для виртуальной директории:



    17 августа 2012 г. 8:05
  • Вы первый человек, кто мне хоть что-то ответил. Я безгранично рад:)

    IIS (Version 7.5.7600.16385)

    Использую VS2012 хотя на 10 те же проблемы. В ней IIS Express как его точную версию определить не знаю.

    Конфиг

      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="MYConfigBehavior">
              <serviceMetadata/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <bindings>
          <netNamedPipeBinding>
            <binding name="MYConfigPipeBinding">
              <security mode="None" />
            </binding>
          </netNamedPipeBinding>
          <netTcpBinding>
            <binding name="MYConfigTcpBinding">
              <security mode="None" />
            </binding>
          </netTcpBinding>
        </bindings>
        <services>
          <service name="MYConfuguration" behaviorConfiguration="MYConfigBehavior">
            <host>
              <baseAddresses>
                <add baseAddress="net.pipe://localhost/MY/" />
                <add baseAddress="net.tcp://localhost:8099/" />
              </baseAddresses>
            </host>
            <!-- Pipe -->
            <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="MYConfigPipeBinding" contract="MY.IMYConfiguration" />
            <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
            <!-- TCP -->
            <endpoint address="" binding="netTcpBinding" bindingConfiguration="MYConfigTcpBinding" contract="MY.IMYConfiguration" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
          </service>
        </services>   
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
      </system.serviceModel>

    Когда запускаю проект, в браузере он мне показывает просто папку. Если нажать на .svc файл, говорит что не разрешена передача метаданных по http, но оно и правильно я его не включал. Пытаюсь подсоединиться MCF Test client, подключение не проходит. В netstat видно, что порт который я указал никто не держит. В pipelist такую привязку не находит.

    Сборка проходит без ошибок. Если добавить http биндинг, все методы отрабатывают.

    17 августа 2012 г. 8:20
  • Какую версиюю IIS используете? Какой конфигурационный файл службы? Какие ошибки при открытии сервиса в браузере?

    Вот хорошая статья на английском: http://msdn.microsoft.com/en-us/magazine/cc163357.aspx

    В IIS 7 Вам нужно включить поддержку netTcp для виртуальной директории:



    Это возможно сделать в конфигурационном файле? Или разрешить эти привязки для всех сайтов по умолчанию? Просто пока в VS работаю такой настройки не нашел, а хотелось бы, чтобы работало уже сейчас.

    • Изменено bumbaram 17 августа 2012 г. 8:29
    17 августа 2012 г. 8:29
  • Нет, это можно сделать только в IIS правой кнопкой по virtual directory->Advanced Settings; или изменить конфигурационный файл IIS ApplicationHost.config

      <application path="/WASService"
        enabledProtocols="http,net.tcp,net.pipe">
      <virtualDirectory path="/" physicalPath="D:\work\Examples\WasService\WasService" />

     <add baseAddress="net.tcp://localhost:8099/" />

    Еще скорее всего у Вас проблема с портом, в IIS порт по умолчанию для net.tcp-> 808, попробуйте поменять порт с 8099 на 808; либо Вам придется ковырять multiple site bindings. Ну или в IIS для web сайта поменяйте порт с 808 на 8099.


     

    "Если нажать на .svc файл, говорит что не разрешена передача метаданных по http, но оно и правильно я его не включал." Удалите mex конечные точки, чтобы увидеть возможные ошибки с конфигурацией сервиса.

    Включите трассировку на стороне сервера и посмотрите логи. Чтобы это сделать добавьте код ниже в web.config. После этого попробуйте вызвать сервис и посмотрите ошибки активации сервиса в логах.

    <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Verbose,ActivityTracing" propagateActivity="true">
            <listeners>
              <add type="System.Diagnostics.XmlWriterTraceListener" name="ServiceModel" initializeData="c:\temp\netclient.svclog">
                <filter type="" />
              </add>
            </listeners>
          </source>
        </sources>
        <trace autoflush="true" />
      </system.diagnostics>





    17 августа 2012 г. 8:59
  • На сколько я понимаю, порт мне придется менять в любом случае. Этот сервис должен общаться по TCP с Silverlight клиентом, а SL поддерживает подключения, только в диапазоне 4502-4534 портов. Раз уж вы единственный, кто отвечает, не могу себе позволить не спросить.

    Когда создаю сайт, с pipe привязкой, там есть поле Binding Information обязательное для заполниния. Туда нужно писать имя конфигурации биндинга, который я в .config файле указал или нет?

    Вы написали убрать mex. У разве они не нужны для tcp и pipe? Как у меня прокси класс сериализовать будет, не имея метаинформации?

    У меня все еще ничего не работает, но Вам Огромное Спасибо.

    17 августа 2012 г. 9:33
  • На сколько я понимаю, порт мне придется менять в любом случае. Этот сервис должен общаться по TCP с Silverlight клиентом, а SL поддерживает подключения, только в диапазоне 4502-4534 портов. Раз уж вы единственный, кто отвечает, не могу себе позволить не спросить.

    Когда создаю сайт, с pipe привязкой, там есть поле Binding Information обязательное для заполниния. Туда нужно писать имя конфигурации биндинга, который я в .config файле указал или нет?

    Вы написали убрать mex. У разве они не нужны для tcp и pipe? Как у меня прокси класс сериализовать будет, не имея метаинформации?

    У меня все еще ничего не работает, но Вам Огромное Спасибо.

    "Когда создаю сайт, с pipe привязкой, там есть поле Binding Information обязательное для заполниния. Туда нужно писать имя конфигурации биндинга, который я в .config файле указал или нет?" - нет, просто звездочку поставьте.

    "Вы написали убрать mex. У разве они не нужны для tcp и pipe? Как у меня прокси класс сериализовать будет, не имея метаинформации?" - прокси класс генерируется на основании метаданных сервиса.  Как только прокси сгенерирован, mex end-point уже не нужен. Часто на боевых (production) окружениях в целях безопасности mex удаляют; для разработки лучше оставлять. Но в Вашем случае, ошибка mex endpoint вероятно скрывает какие-нибудь другие ошибки. Поэтому, временно закомментируйте или удалите mex endpoints, и попробуйте открыть svc файл в браузере.

    По поводу использования netTcpBinding в сильверлайт, этот binding полностью не поддерживается в Silverlight, поэтому рекомендую узнать про ограничения и подумать, нужно ли его использовать. Если можете, то лучше используйте basicHttpBinding или свой customBinding.

    По поводу named pipe, этот байндинг могут использовать только клиенты на той же машине, где хостится Ваш сервис. Для работы с named pipes Вам также нужно включить его в IIS, добавив net.pipe в Enabled Protocols для виртуальной директории.

    Чтобы разобраться с ошибками, попробуйте сначала настроить один байндинг (напр, net.tcp), а уже потом настраивать следующий.


    17 августа 2012 г. 10:38
  • Не забывайте отметчать ответы, содержащие решение проблемы. Спасибо.

    Для связи [mail]

    21 августа 2012 г. 10:06
    Модератор