2012-06-13 4 views
1

У меня есть служба Windows, которую я успешно установил с помощью installutil, но когда я ее запускаю, я получаю сообщение об ошибке, что служба не запускалась, потому что она не смогла своевременно ответить. В средстве просмотра событий я вижу эту ошибку.Ошибка при запуске службы Windows

Application: AuctionControl.Service.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: Microsoft.Practices.Unity.ResolutionFailedException 
Stack: 
    at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(System.Type, System.Object, System.String, System.Collections.Generic.IEnumerable`1<Microsoft.Practices.Unity.ResolverOverride>) 
    at Microsoft.Practices.Unity.UnityContainer.Resolve(System.Type, System.String, Microsoft.Practices.Unity.ResolverOverride[]) 
    at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](Microsoft.Practices.Unity.IUnityContainer, Microsoft.Practices.Unity.ResolverOverride[]) 
    at AuctionControl.Service.Service1..ctor() 
    at AuctionControl.Service.Program.Main() 

Мой код ниже

using System.ServiceProcess; 
using Microsoft.Practices.Unity; 

namespace AuctionControl.Service 
{ 
    public partial class Service1 : ServiceBase 
    { 
     #region Constructor(s) 

     public Service1() 
     { 
      InitializeComponent(); 


      _container = new UnityContainer(); 

      _auctionControl = _container.Resolve<Services.Engine.AuctionControl>(); 
     } 

     #endregion 

     #region Fields 

     private readonly Services.Engine.AuctionControl _auctionControl; 
     private readonly UnityContainer _container; 

     #endregion 

     protected override void OnStart(string[] args) 
     { 
      _auctionControl.StartAuctionControl(); 
     } 

     protected override void OnStop() 
     { 
      _auctionControl.StopAuctionControl(); 
     } 
    } 
} 
+0

Что вы делаете в сервисе 'constructor' и' StartService'? –

+0

Может быть множество причин для этой ошибки. Вы пробовали отладку? –

+0

Это не мой код, поэтому я еще не посмотрел на него. Я попробую и отлаживаю его. –

ответ

0

Это не связано с будучи службы Windows явно, это потому, что вы не настроили свой IoC так, что Unity знает, что вводить, когда это попросил экземпляр чего-то в вашем конструкторе.

Предположительно, у вас есть интерфейс в вашем конструкторе AuctionControl.Service.Service1, но вы не сказали своему контейнеру Unity, какой конкретный класс привязать/разрешить этот интерфейс.

EDIT:

ли вам на самом деле нужно Unity? Кажется, он ничего не полезен.

Try:

public Service1() 
{ 
    InitializeComponent(); 

    _auctionControl = new Services.Engine.AuctionControl(); 
} 

ли эта работа?

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

Эта линия:

_auctionControl = _container.Resolve<Services.Engine.AuctionControl>(); 

говорит: «Я хочу, чтобы конкретный экземпляр AuctionControl, но я» не хочу, чтобы точно определить, какой тип, который во время компиляции и Resolve будет понять это во время выполнения ». Однако для того, чтобы определить, что вам нужно дать, когда вы запрашиваете AuctionControl, вы должны сообщить ему, что должен вернуть звонок Resolve. Чтобы сделать это, вам нужно настроить вызов RegisterType, прежде чем делать какие-либо Resolve -ing, что-то вроде:

_container.RegisterType<Services.Engine.AuctionControl, Services.Engine.AuctionControl>(); 

, который, в данном случае бессмысленно, как Services.Engine.AuctionControl всегда решает сам. (RegisterType<WhenAskedForThisType, GiveMeThisType>();).

+0

Я отправлю свой код сейчас. –

Смежные вопросы