IIS 7.0 с использованием netTcpBinding - PullRequest
1 голос
/ 17 февраля 2010

Более недели я безуспешно пытался разместить службу wcf с помощью netTcpBinding.

С http все нормально. Но с tcp возникают проблемы.

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

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

. В IIS Manager / Управление веб-сайтом / Расширенные настройки включены протоколы http и net.tcp. -Я также добавляю net tcp к привязке сайта

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

Вот как выглядит мой Web.Config:

   <services>
        <service name="Services.Library.OrderService"  BehaviorConfiguration="OrderServiceBehavior">
            <!-- Service Endpoints -->
            <endpoint  address="WSOrder.svc" 
                        binding="netTcpBinding"
                        bindingConfiguration="netTcpStreaming"
                        name="NetTcpBindingEndpoint"
                        contract="Services.Interface.IOrderService" >


                <identity>
        <dns value="localhost" />
      </identity>

            </endpoint>

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

            <host>
                <baseAddresses>
                    <add baseAddress="net.tcp://localhost:808/" />                  
                </baseAddresses>
            </host>


        </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior name="OrderServiceBehavior">
                <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
                <serviceMetadata httpGetEnabled="false" />
                <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
                <serviceDebug includeExceptionDetailInFaults="false" />
                <dataContractSerializer maxItemsInObjectGraph="6553600" />
            </behavior>
        </serviceBehaviors>
    </behaviors>

    <bindings>
        <netTcpBinding>
            <binding name="netTcpStreaming"
                     openTimeout="10:00:00"
                     closeTimeout="10:00:00" 
                     receiveTimeout="10:00:00"
                     sendTimeout="10:00:00"
                     maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" >

                <!-- this is for demo only. Https/Transport security is recommended -->
                <security mode="None" />
            </binding>
         </netTcpBinding>

    </bindings>

Подскажите, пожалуйста, что не так с моим кодом?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 17 февраля 2010

У меня недавно были похожие проблемы, но в конце концов я смог заставить их работать.

Вы говорите: «В IIS Manager / Управление веб-сайтом / Расширенные настройки включены протоколы http и net.tcp. - Я также добавляю net tcp к привязке сайта». Этот параметр также необходимо установить вручную на уровне «виртуального корня», если он есть. Это работает под виртуальным корнем в IIS? Если это так, проверьте эту настройку там.

Вы также установили привязки на веб-сайте , уровень «Редактировать привязки»? Вам нужно будет добавить привязку net.tcp здесь. В вашем случае:

Type: net.tcp
Binding Information: 808:*

Если оба из них не пройдены, отправьте сообщение обратно. Я буду следить за:)

[Изменить в ответ на ваши комментарии]

ОК. Я внимательно посмотрел на ваш конфиг, и он мне не подходит. Это серверная конфигурация? [т.е. не для вызывающего клиента]

Я пересоздал конфиг, основанный на вашем, для экспериментов с вами. [Я избавился от мексиканских вещей - просто скрепка tcp)

Использовали ли вы редактор конфигурации службы WCF для создания этой конфигурации, или вы делали это вручную? Если вручную - не используйте редактор настроек. Это спасает жизни!

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="netTcpStreaming" closeTimeout="00:10:00" openTimeout="00:10:00"
            sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="Services.Library.OrderService">
        <endpoint address="net.tcp://localhost:808/" binding="netTcpBinding"
          bindingConfiguration="netTcpStreaming" contract="Services.Interface.IOrderService" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:808/" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>
1 голос
/ 17 февраля 2010

Если вы хотите использовать mex, вам нужно определить конечную точку http, используете ли вы ее или нет.

брось мекс, и твой сервис будет работать нормально.

Вот рабочая привязка net.tcp из одного из моих интеграционных тестов .... сравните ее с тем, что у вас есть.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="WcfServiceLibrary1.Service">
        <endpoint address="service" binding="netTcpBinding" contract="WcfServiceShared.IService" name="TcpBinding" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8000/ServiceHost/" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>
</configuration>
0 голосов
/ 17 февраля 2010

Это предположение, но вы можете попробовать поработать с этим кодом:

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

Возможно изменить net.tcp на http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...