2011-11-14 33 views
0

net start servicenameを使用して以前インストールしたサービスを開始しようとしています。C#サービス:エラー開始サービス:標準コンストラクタがありません

サービスが正常にインストールされたこと、レジストリにエントリがあること、および管理ツール領域内のサービスの概要が確認できます。

実際には、イベントログに標準(パラメータなし)コンストラクタがないためにサービスを読み込めないというエラーメッセージが表示されることがあります。シュトラックトレースの

最後の2行が

bei Test.Service.DbService.OnStart(String[] args) 
bei System.ServiceProcess.ServiceBase.ServiceQ... 

次されている私は、次の方法でサービスを実装:

public partial class DbService : ServiceBase 
{ 
    public DbService() 
    { 
     InitializeComponent(); 
     this.ServiceName = "Service1"; 
    } 

    protected override void OnStart(string[] args) 
    { 
     if (serviceHost != null) 
      serviceHost.Close(); 

     Uri[] baseAddress = new Uri[]{ 
     //new Uri("http://localhost:8000"), 
     new Uri("net.pipe://localhost")}; 

     string PipeName = "Test"; 

     serviceHost = new ServiceHost(typeof(Kernel), baseAddress); 

     // Add a mex endpoint 
     ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
     smb.HttpGetEnabled = true; 
     smb.HttpGetUrl = new Uri("http://localhost:8000/DatabaseService/mex"); 
     serviceHost.Description.Behaviors.Add(smb); 



     serviceHost.AddServiceEndpoint(typeof(IDatabase), new NetNamedPipeBinding(), PipeName); 

     serviceHost.Open(); 
    } 

    protected override void OnStop() 
    { 
     // do stuff 
    } 
} 

と、それは私が最初にサービスを呼び出す方法は次のとおりです。

static void Main() 
{ 
    ServiceBase[] ServicesToRun; 
    ServicesToRun = new ServiceBase[] 
    { 
     new DbService() //new instance of class implementing the service! 
    }; 
    ServiceBase.Run(ServicesToRun); 
} 

私はこれを正しく行っていることを確認できますか?

+0

ここをクリックしてください。http://msmvps.com/blogs/theproblemsolver/archive/2011/04/19/inversion-of-control-and-wcf.aspx – Azodious

+0

すべての依存アセンブリをインストールしたことがありますか? (最初のインストール以降に依存関係が変更された場合) – jgauffin

+0

依存関係が1つあります。私は、独自のDLL内でサービス契約を抽出しましたが、インストーラを使用して出荷されます(依存関係としてリストされ、インストールフォルダにもコピーされます)。 – inva

答えて

0

私はそれを得ました、それは私がちょうどそれを知っていたのでとても簡単でした。重要なのは、「サービスタイプ」に標準のコンストラクタが含まれていないことを認識し、実際には完全に正しいものであることを認識するまで、エラーメッセージを数回再読しました。これは興味のある行です:serviceHost = new ServiceHost(typeof(Kernel)、baseAddress);クラス "Kernel"には標準のコンストラクタが含まれていません。私はそれとその作業に任意のパラメータなしでコンストラクタを追加しました。あなたのアイデアとサポートに感謝します!

関連する問題