Служба WCF (net.tcp): работает во всех системах, кроме одной. - PullRequest
1 голос
/ 30 июля 2010

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

0 голосов
/ 30 июля 2010

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

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

0 голосов
/ 30 июля 2010

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

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

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

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

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

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

...