Я написал созданную службу WCF внутри службы Windows, и по какой-то причине я не могу понять, я развернул эту службу на связке систем (все почти идентичны в ОС и конфигурации), и он работает на всех, кроме одного сервера. Конфигурация для всех развертываний идентична, за исключением базового адреса службы.Служба WCF (net.tcp): работает на всех, кроме одной системы
Когда услуга запущена, я не получаю исключения, когда открываю ServiceHost
, а при использовании netstat -anp
я вижу, что сокет был открыт процессом службы. Я установил ведение журнала брандмауэра Windows для упавших пакетов, но файл журнала остается пустым.
Если я пытаюсь получить доступ к сервису WCF от клиента тестирования WCF, я получаю следующее сообщение:
Error: Cannot obtain Metadata from net.tcp://myhostname:9001/SysMonitorAgent
If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.
WS-Metadata Exchange Error
URI: net.tcp://myhostname:9001/SysMonitorAgent
Metadata contains a reference that cannot be resolved: 'net.tcp://myhostname:9001/SysMonitorAgent'.
There was no endpoint listening at net.tcp://myhostname:9001/SysMonitorAgent that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.
Я пытался WCF протоколирование, но файл журнала не даже получить создан.
Конфиг для службы заключается в следующем:
<system.serviceModel>
<diagnostics>
<messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
</diagnostics>
<bindings>
<netTcpBinding>
<binding name="InterfaceServiceNetTcpBinding">
<security mode="None">
<transport clientCredentialType="None" protectionLevel="None" />
<message clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="InterfaceServiceBehavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug httpHelpPageEnabled="false" httpsHelpPageEnabled="false" includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="SysMonitor.Agent.Interface.InterfaceService" behaviorConfiguration="InterfaceServiceBehavior">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="InterfaceServiceNetTcpBinding" contract="SysMonitor.Agent.Interface.IInterfaceService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://myhostname:9001/SysMonitorAgent" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Я вроде потерял, потому что нет никаких признаков вообще, почему она не работает. Любая помощь будет оценена по достоинству.
Я проверил, что порт используется только правильным процессом. .NET - это версия 4, установленная на всех машинах. Сторонние DLL-файлы не используются. Единственным брандмауэром является брандмауэр Windows, который имеет исключение для используемого TCP-порта. Все развертывания выполнялись из одного и того же .msi, и файлы были идентичны. – ErikHeemskerk
Исправлено, и это была глупая ошибка с моей стороны. Я попытался изменить порт, а затем заметил, что при запуске 'netstat -ano' порт не изменился. Затем я заметил, что редактировал неправильный файл конфигурации. Спасибо за указатель! – ErikHeemskerk
Эй, Дэвид, у меня такая же проблема, я думаю, и попробовал, что ты сказал, но не работал ... ты можешь мне помочь? вот соответствующий вопрос: ** [Вопрос] (http: // stackoverflow.com/questions/9273340/cant-test-net-tcp-service-in-wcftestclient # comment11690979_9273340) ** – Joze