Невозможно подключиться к одной из моих служб WCF, даже с помощью telnet - PullRequest
0 голосов
/ 07 апреля 2010

У меня есть шесть служб wcf, которые я размещаю в службе Windows. Все отлично работает на моей машине (Windows 7) ( Редактировать: при размещении в Cassini, но не при запуске через службу Windows), но когда я пробую его в работе (Windows Server 2003), я не могу подключиться из моих шести услуг ReportsService.

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

Я включил трассировку WCF, но она никогда не показывает вызов моей службе; ничего полезного там нет.

Я попытался подключиться к порту (9005) через telnet, но это не удалось. Я могу подключиться ко всем другим службам (порты 9001-4 и 9006) просто отлично.

Я подумал, что, возможно, возникла проблема с портом 9005, поэтому я изменил его на 9007 и все еще не мог подключиться. У меня был один из моих рабочих сервисов на 9005, и он действительно работал нормально. Так что я уверен, что с портом или настройками брандмауэра все в порядке. Какой бы порт я ни сказал ReportsService использовать не удастся.

Теперь у меня нет идей. Кажется, что это не один хостинг, но я не могу получить информацию о том, почему или что не так. Любые идеи о том, что я мог бы попытаться получить эту информацию? Или что может быть не так?

Необработанный System.ServiceModel.EndpointNotFoundException, который я получаю при запуске моего клиента:

Не удалось подключиться к net.tcp: // localhost: 9005 / ReportsService.
Попытка подключения продолжалась в течение промежутка времени 00: 00: 01.0937430. Ошибка TCP
код 10061: не удалось установить соединение, потому что целевой компьютер
активно отказался от него 127.0.0.1:9005. ,

Файл конфигурации моего хоста содержит:

<!-- Snipped other services to simplify for you. -->
<endpoint binding="netTcpBinding" bindingConfiguration="customTcpBinding" contract="ServiceContracts.IReportsService" />
<endpoint binding="netTcpBinding" bindingConfiguration="customTcpBinding" contract="ServiceContracts.IUpdateData" />

IReportService это тот, с кем у меня проблемы. Я получаю прокси для IReportsService со следующим кодом, где Server - имя хост-машины:

return new ChannelFactory<IReportsService>("").CreateChannel(new EndpointAddress(string.Format("net.tcp://{0}:9005/ReportsService", Server)));

Мой конфигурационный файл клиента содержит:

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="customTcpBinding" maxReceivedMessageSize="2147483647">
        <readerQuotas maxNameTableCharCount="2147483647" maxStringContentLength="2147483647"/>
        <security mode="None"/>
      </binding>
    </netTcpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata httpGetEnabled="True"/>
        <serviceDebug includeExceptionDetailInFaults="True" />
        <serviceThrottling maxConcurrentCalls="30" maxConcurrentInstances="30" maxConcurrentSessions="1000" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <!-- Snipped other services to simplify for you. -->
    <service behaviorConfiguration="ServiceBehavior" name="WcfService.ReportsService">
      <endpoint address="ReportsService" binding="netTcpBinding" bindingConfiguration="customTcpBinding"
        contract="ServiceContracts.IReportsService" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:9005" />
        </baseAddresses>
      </host>
    </service>
    <service behaviorConfiguration="ServiceBehavior" name="WcfService.UpdateData">
      <endpoint address="UpdateData" binding="netTcpBinding" bindingConfiguration="customTcpBinding"
        contract="ServiceContracts.IUpdateData" />
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:9006" />
        </baseAddresses>
      </host>
    </service>
  </services>
</system.serviceModel>

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

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Я идиот.Я забыл создать и открыть ServiceHost для ReportsService в моем сервисе Windows .... Я думал, что все отлично работало на моей машине, но на самом деле это работало только при размещении в Cassini, а не при фактической установке службы Windowsна моей машине.Это то, что, наконец, предупредило меня.

Спасибо за предложения и за помощь!

0 голосов
/ 07 апреля 2010

Попробуйте использовать явный IP-адрес вашего ящика вместо "localhost" во всех ваших конфигах. «Невозможно установить соединение, потому что целевой компьютер активно отказался 172.0.0.1:9005 ". 172.0.0.1 выглядит странно ... Просто предположение. Также вы можете проверить, кто прослушивает какой порт, запустив" netstat "в командной строке.

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