Я следил за этой статьей 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?