Не удается заставить WCF работать с netTcpBinding

Ниже мой app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Indexer">
        <endpoint address="net.tcp://localhost:8000/Indexer/" binding="netTcpBinding"
          bindingConfiguration="TransactionalTCP" contract="Me.IIndexer" />
      </service>
      <service name = "Indexer" behaviorConfiguration = "MEXGET">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8000/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name = "MEXGET">
          <serviceMetadata httpGetEnabled = "true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="TransactionalTCP"
           transactionFlow="true"
         />
      </netTcpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

По какой-то причине я не могу получить доступ к службе WCF на машине, на которой я это запустил. Кто-нибудь может обнаружить ошибку? У меня есть служба netTcpBinding.

Когда у меня был такой же запуск в HTTP, он отлично работал со следующим файлом .config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="IndexerServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/Indexer/"/>
          <serviceDebug includeExceptionDetailInFaults="True" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="Indexer" behaviorConfiguration="IndexerServiceBehavior">
        <endpoint address="http://localhost:8080/Indexer/" binding="basicHttpBinding"
            bindingConfiguration="" name="HTTP" contract="IIndexer" />
        <endpoint address="http://localhost:8080/Indexer/MEX/" binding="mexHttpBinding"
            bindingConfiguration="" name="MEX" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

Я не могу понять, что делаю не так ...


person Matt    schedule 28.08.2009    source источник


Ответы (3)


Вы, конечно, открыли брандмауэр, чтобы он слушал?

На всякий случай вот привязка, которую я успешно использовал не так давно:

<services>

  <service name="MyService.MySearch" behaviorConfiguration="ServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://mypc:8003/MyService"/>
      </baseAddresses>
    </host>
    <endpoint bindingConfiguration="Binding1"
              binding="netTcpBinding"
              contract="MyService.IMySearch"
              address="net.tcp://mypc:8004/MyService"  />
  </service>
</services>
<bindings>
  <netTcpBinding>
    <binding name="Binding1"
             hostNameComparisonMode="StrongWildcard"
             sendTimeout="00:10:00"
             maxReceivedMessageSize="65536"
             transferMode="Buffered"
             portSharingEnabled="false">
      <security mode="None">
        <transport clientCredentialType="None" />
        <message clientCredentialType="None" />
      </security>
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
    </behavior>
  </serviceBehaviors>
</behaviors>

У этой привязки нет безопасности.

person spender    schedule 28.08.2009
comment
Я сказал это только потому, что на днях это стоило мне минут двадцати :) - person spender; 28.08.2009
comment
Ах, у вас нет конечной точки mex, когда вы собираетесь добавить ссылку на службу в Visual Studio, можете ли вы просто дать ей адрес net.tcp? - person Matt; 28.08.2009
comment
нет. обратите внимание, что у него есть базовый адрес http, который работает нормально. Я никогда не беспокоился о том, что такое Мексика. не казалось необходимым. - person spender; 28.08.2009

Возможно, вам придется включить службу совместного использования портов Net.TCP. Цитата из MSDN:

Windows Communication Foundation (WCF) использует службу Windows, называемую службой общего доступа к портам Net.TCP, для облегчения совместного использования портов TCP между несколькими процессами. Эта служба устанавливается как часть WCF, но она не включена по умолчанию из соображений безопасности, поэтому ее необходимо включить вручную перед первым использованием. В этом разделе описывается, как настроить Net TCP Port Sharing Service с помощью оснастки Microsoft Management Console (MMC).

Удачи!

person Mr. Smith    schedule 28.08.2009

Попробуйте использовать разные номера портов для привязки http и net.tcp. Совместное использование порта имеет другую цель - использовать один и тот же порт net.tcp для нескольких процессов.

person softveda    schedule 28.08.2009