2017-06-29 19 views
1

WindowsサービスでホストされているNinject WCFのRESTサービスでは、私はシンプルなWCF RESTサービスを作成し

class NinjectBindings: NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IReadData>().To<ReadData>(); 
     Bind<IFacadeToRepo>().To<RepositoryApi>(); 
    } 
} 

そして、最後に私はServiceBaseを作成しました:

public partial class MyRestWCFRestWinSer : ServiceBase 
{ 
    ServiceHost readDataServiceHost = null; 
    private StandardKernel kernel; 

    public MyRestWCFRestWinSer() 
    { 
     kernel = new StandardKernel(); 
     kernel.Load(Assembly.GetExecutingAssembly()); 

     InitializeComponent(); 
    } 

    public void OnDebug() 
    { 
     OnStart(null); 
    } 

    protected override void OnStart(string[] args) 
    { 
     readDataServiceHost = new ServiceHost(kernel.Get<IReadData>()); 
     readDataServiceHost.Open(); 
    } 

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

私は今、IRinDataを解決し、新しいReadDataウィジェットのデフォルトIFacadeToRepoを作成する必要があると考えました。しかし、それは動作しません。 installutil経由でWindowsサービスをインストールし、procesを実行した後 - >「サービスが開始されました。サービスを開始できませんでした。サービスはエラーを報告しませんでした」

これらのWebサービスをninjectsと一緒に実行してもらえますか?

編集。後

kernel.Get<IReadData>() 

にそれを置き換える: - それは私が作った

作品READDATAに

typeof演算(READDATA)

および追加デフォルトでは、空のコンストラクタそれは排他的な問題を抱えているようです見えますいくつかのテストは行の後に行を追加します。

+0

私は、TopShelfでWindowsサービスを使用してホストできるIISでホストしていないソリューションを探してきました。これが私の問題を解決しました。私は一回以上upvoteできますか? – JohnChris

答えて

1

非常に単純な問題であるようです。

は、まず:私たちはninjectにカーネルをロードしているとき、それは

public override void Load(). 

によって上書きされたメソッドLoadを開始する必要があります。しかし、それは動作しません。 解決策?このクラスの可用性にに関する問題:それが仕事である結果で

public class NinjectBindings: NinjectModule 

class NinjectBindings: NinjectModule 

私はにそれを変更しました。

二つ目:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)] 
public class ReadData : IReadData 

ことだ:私はServiceBehaviourを追加することにより、サービスの動作を変更する必要がありました。

+0

私は探しています私はTopShelfでWindowsサービスを使用してホストすることができ、これが私の問題を解決したIISでホスティングを中心にしていない解決策のために全面的に - 私は複数回upvoteできますか? – JohnChris

0

私は別のDIコンテナ "キャッスルウィンザー"とWCFレストサービスでこれを行いました。このトリックは、次のようにアプリケーション開始イベントのRoutTableにServiceRouteを追加することです。

RouteTable.Routes.Add(new ServiceRoute("servicename", new WindsorServiceHostFactory<RestServiceModel>(), typeof(IReadData))); 

1- NinjectのWindsorServiceHostFactoryに似たクラスを探します。

2 - http://xx.com/servicename/GetHealthStatusでサービスを呼び出します(IISでのホスティングについては、Windowsサービスホスティングにも同じが適用されますが、別のアドレスと仮定します)。パラメータなしのコンストラクタなしで動作するはずです。

関連する問題