Проблема с получением WCF для работы с netTcpBinding - PullRequest
2 голосов
/ 28 августа 2009

Ниже мой 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>

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

Ответы [ 3 ]

3 голосов
/ 28 августа 2009

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

Если это нужно, вот привязка, которую я успешно использовал не так давно:

<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>

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

1 голос
/ 28 августа 2009

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

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

Удачи!

0 голосов
/ 28 августа 2009

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

...