net.tcp, размещенный в IIS7.5 на виртуальной машине Windows 7 с использованием .NET 4.0 - PullRequest
0 голосов
/ 21 февраля 2011

У меня самый простой сервис WCF, который работает, когда размещается в IIS с использованием привязки basicHttp.У него есть один пустой метод с именем DoNothing, который не принимает параметров и возвращает void

void DoNothing ()

Однако я не могу заставить его работать при попытке разместить его в IIS с помощью net.tcp.

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

Я включил активацию без http.Я использую другой порт 12345, чтобы избежать любых конфликтов.Веб-сайт и служба настроены на использование привязки net.tcp.

Службы Net.Tcp ListenerAdaptor и Net.Tcp Port Sharing работают

Я могу получить метаданные для использования WcfTestClient для тестированиясервис.

Я получаю ошибку

Соединение с сокетом было прервано.Это может быть вызвано ошибкой обработки вашего сообщения или превышением тайм-аута приема удаленным хостом, или проблемой основного сетевого ресурса.Тайм-аут локального сокета был '00: 00: 59.8597984 '.

Внутреннее исключение

Существующее соединение было принудительно закрыто удаленным хостом

Я проверял все,Я попытался вызвать его удаленно и локально на виртуальной машине

. Я могу только думать, что это простая ошибка конфигурации или проблема безопасности.Виртуальная машина не находится в домене.Я полностью отключил брандмауэр на виртуальной машине.

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

Вот мой web.config

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <netTcpBinding>
        <binding name="PortSharingBinding" portSharingEnabled="true">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
    <services>
      <service name="SimpleNetTcpService.Service">
        <endpoint address="net.tcp://192.168.0.2:12345/SimpleNetTcpService/Service"
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

1 Ответ

0 голосов
/ 21 февраля 2011

Я нашел проблему.Я только что удалил атрибут адреса из сервисного элемента:

<service name="SimpleNetTcpService.Service">
        <endpoint address="net.tcp://192.168.0.2:12345/SimpleNetTcpService/Service"
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

сейчас

<service name="SimpleNetTcpService.Service">
        <endpoint 
          binding="netTcpBinding" bindingConfiguration="PortSharingBinding" 
          contract="SimpleNetTcpService.IService" />

Отлично работает сейчас

...