2010-07-30 4 views
1

Я написал созданную службу 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> 

Я вроде потерял, потому что нет никаких признаков вообще, почему она не работает. Любая помощь будет оценена по достоинству.

ответ

0

На сервере, который вы развертываете, тоже что-то работает на порте 9100?

Кажется, что он не может найти услугу. Вы пытались изменить базовый адрес?

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

  • версии .NET
  • Убедитесь в отсутствии брандмауэров не установлены на этой машине, предотвращая связывание
  • Проверьте порт вы связывающие открыт в этом случае 9100
  • Убедитесь, что любой 3-й party .dll включены в GAC или папку, если это необходимо.
  • Проверьте все .dll, и ваш код обновлен.

Я вижу сообщение об ошибке говорит «net.tcp: // myhostname: 9001/SysMonitorAgent»

Пытались ли вы заменить его на IP-адрес машины, а не использовать имя хоста?

+0

Я проверил, что порт используется только правильным процессом. .NET - это версия 4, установленная на всех машинах. Сторонние DLL-файлы не используются. Единственным брандмауэром является брандмауэр Windows, который имеет исключение для используемого TCP-порта. Все развертывания выполнялись из одного и того же .msi, и файлы были идентичны. – ErikHeemskerk

+0

Исправлено, и это была глупая ошибка с моей стороны. Я попытался изменить порт, а затем заметил, что при запуске 'netstat -ano' порт не изменился. Затем я заметил, что редактировал неправильный файл конфигурации. Спасибо за указатель! – ErikHeemskerk

+0

Эй, Дэвид, у меня такая же проблема, я думаю, и попробовал, что ты сказал, но не работал ... ты можешь мне помочь? вот соответствующий вопрос: ** [Вопрос] (http: // stackoverflow.com/questions/9273340/cant-test-net-tcp-service-in-wcftestclient # comment11690979_9273340) ** – Joze

0

В дополнение к пунктам Давида проверьте, работает ли служба Windows.

Любые ошибки в журнале событий?

+0

Служба запущена, и кроме «службы запущена» ничего нет в средстве просмотра событий. – ErikHeemskerk

 Смежные вопросы

  • Нет связанных вопросов^_^