У меня есть шесть служб 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>
Я пытался упростить ситуацию с приведенными выше фрагментами кода, но если вы хотите узнать больше, просто спросите, и я с радостью предоставлю все, что поможет.