Служба WCF (net.tcp): работает во всех системах, кроме одной.

Я написал, что создал службу WCF внутри службы Windows, и по какой-то причине я не могу понять, я развернул службу на нескольких системах (все почти идентичны по ОС и конфигурации), и она работает на всех, кроме одной сервер. Конфигурация для всех развертываний идентична, за исключением базового адреса службы.

Когда служба запускается, я не получаю исключения при открытии 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>

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

2 ответа

Решение

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

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

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

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

Я вижу сообщение об ошибке "net.tcp://myhostname:9001/SysMonitorAgent "

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

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

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

Другие вопросы по тегам