WCF с использованием службы Windows - PullRequest
3 голосов
/ 22 мая 2010

Я создаю службу WCF, которая должна быть размещена в службе Windows. Я создал консольное приложение следующим образом

Я зашел в консоль управления (services.msc) и запустил службу. Но я получил следующую ошибку

Служба LijosWindowsService на Локальный компьютер запустился, а затем остановился. Некоторые службы останавливаются автоматически, если у них нет работы сделать, например, журналы производительности и оповещения

Я пошел в программу просмотра событий и получил следующее

Служба не может быть запущена. System.InvalidOperationException: Сервис "Lijo.Samples.WeatherService" имеет нулевое применение (не инфраструктурные) конечные точки. это может быть потому, что нет файла конфигурации был найден для вашего приложения, или потому что не соответствует элементу службы название службы можно найти в файл конфигурации, или потому что нет конечные точки были определены в службе элемент.

Не могли бы вы дать мне знать, что здесь за отсутствующая ссылка?

Имя файла [LijosService.cs]

using System.ComponentModel;
using System.ServiceModel;
using System.ServiceProcess;
using System.Configuration;
using System.Configuration.Install;

namespace Lijo.Samples
{
   [ServiceContract(Namespace = "http://Lijo.Samples")]
   public interface IWeather
   {
      [OperationContract]
      double Add(double n1, double n2);
   }

   public class WeatherService : IWeather
   {
       public double Add(double n1, double n2)
       {
           double result = n1 + n2;
           return result;
       }
   }

   public class MyWindowsService : ServiceBase
   {
       public ServiceHost serviceHost = null;

       public MyWindowsService()
       {
           // Windows Service name
           ServiceName = "LijosWindowsService";
       }

       public static void Main()
       {
           ServiceBase.Run(new MyWindowsService());
       }

       protected override void OnStart(string[] args)
       {
           if (serviceHost != null)
           {
               serviceHost.Close();
           }
           serviceHost = new ServiceHost(typeof(WeatherService));
           serviceHost.Open();
       }

       protected override void OnStop()
       {
           if (serviceHost != null)
           {
               serviceHost.Close();
               serviceHost = null;
           }
       }
   }

    // ProjectInstaller 
    [RunInstaller(true)]
    public class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller myProcess;
        private ServiceInstaller myService;

        public ProjectInstaller()
        {
            myProcess = new ServiceProcessInstaller();
            myProcess.Account = ServiceAccount.LocalSystem;

            myService = new ServiceInstaller();
            myService.ServiceName = "LijosWindowsService";

            Installers.Add(myProcess);
            Installers.Add(myService);
        }
    }
}

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="Lijo.Samples.WeatherService"
               behaviorConfiguration="WeatherServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8000/ServiceModelSamples/LijosService"/>
          </baseAddresses>
        </host>
        <endpoint address=""
                  binding="wsHttpBinding"
                  contract="Lijo.Samples.IWeather" />
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WeatherServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="False"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

Спасибо

Lijo

Ответы [ 2 ]

6 голосов
/ 22 мая 2010

Ваш конфиг и код выглядят нормально - вы уверены, что в той же директории, где находится (yourapplication) .exe, находится файл (yourapplication) .exe, тот, который вы запускаете в качестве своей службы?

Сообщение об ошибке будет означать, что файл конфигурации отсутствует. Убедитесь, что он есть, иначе ваша служба NT не сможет настроить службу WCF по мере необходимости.

0 голосов
/ 18 февраля 2015

Убедитесь, что вы указали один и тот же файл app.config как в службе WCF, так и в службе Windows. Если это также не помогает удалить app.config из службы WCf, настройте aap.config вручную в службе Windows и скопируйте его в службу WCf. Это, безусловно, решит вашу проблему ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...