Подтвердить что ты не робот

"Сервис X имеет нулевые конечные точки приложения", если я не добавлю конечную точку в код - почему?

Я следил за этой статьей MSDN, чтобы полностью создать службу WCF, размещенную в службе управляемого NT.

Когда я нажимаю "Пуск" в консоли служб, я вижу следующее в средстве просмотра событий:

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

Я попытался проверить все возможные причины, которые я мог найти. Здесь описание сервиса в файле App.Config:

 <service name="MyServiceNamespace.RequestProcessorWindowsService"
           behaviorConfiguration="RequestProcessorServiceBehavior">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8095/RequestProcessorService"/>
      </baseAddresses>
    </host>
    <endpoint address= ""
              binding="wsHttpBinding"
              contract="MyServiceNamespace.IRequestProcessor" />
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
  </service>

Все объекты названы с их пространствами имен, так что это не проблема. Файл App.Config помещается в bin\Debug - именно там, откуда начинается служба NT.

Но когда я меняю свой потомок ServiceBase OnStart() из исходной реализации:

public class RequestProcessorWindowsService : ServiceBase {
    public ServiceHost serviceHost = null;
    //other methods skipped 
    protected override void OnStart(string[] args)
    {
        if( serviceHost != null ) {
       serviceHost.Close();
        }
        serviceHost = new ServiceHost( typeof(RequestProcesssorImpl) );
        serviceHost.Open();
    }
}

к следующему, так что он вызывает AddServiceEndpoint(), сервис начинает нормально (но я не могу добавить ссылку на него, поэтому, я думаю, что-то еще не так):

public class RequestProcessorWindowsService : ServiceBase {
    public ServiceHost serviceHost = null;
    //other methods skipped 
    protected override void OnStart(string[] args)
    {
        if( serviceHost != null ) {
       serviceHost.Close();
        }
        Uri baseAddress = new Uri("http://localhost:8095/RequestProcessorService");
        serviceHost = new ServiceHost( typeof(RequestProcesssorImpl), baseAddress );
        serviceHost.AddServiceEndpoint( typeof(IRequestProcessor), new BasicHttpBinding(), baseAddress );
        serviceHost.Open();
    }
}

Почему моя служба не запускается при настройке через App.Config?

4b9b3361

Ответ 1

Имя службы в файле конфигурации не соответствует классу реализации службы.

Файл конфигурации должен содержать:

<service name="MyServiceNamespace.RequestProcesssorImpl"