WAS (iis7 の net.tcp バインディング) でホストされているサービスに WCF 機能を使用しており、コールド アプリケーションの起動時 (つまり、まだ実行されていないとき) にのみ奇妙な問題が発生します。
次のステートメントは、コンテナーの最初のインスタンス化時に実行する必要があります。
DefaultServiceHostFactory.RegisterContainer(c.Kernel);
サービスが要求されると、WCF トレースファイルで次の例外が発生します
カーネルが null でした。DefaultServiceHostFactory.RegisterContainer() を呼び出すのを忘れましたか?
問題は、コンテナが作成される前に ServiceHostFactory がサービスのホストのインスタンスを作成しようとしているようです。
ノート:
- この例外は、Application_Startが実行される前に発生しています
- アプリケーションが実行されている場合 (およびコンテナーが初期化されている場合)、サービスは期待どおりに動作します。アプリケーションは、HTTP 経由で適切な IIS サイトに移動するか、Visual Studio からデバッグ セッションを開始することで開始できます。
問題を再現する手順
- IISReset を発行して、すべての IIS アプリケーション プールをシャットダウンします。
- 問題のサービスに電話する
WCF トレースは次のように吐き出します。
System.ServiceModel.ServiceActivationException: コンパイル中の例外のため、サービス '/abcd.svc' をアクティブ化できません。例外メッセージ: 呼び出しのターゲットによって例外がスローされました.. ---> System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.ArgumentNullException: カーネルが null でした。DefaultServiceHostFactory.RegisterContainer() を呼び出すのを忘れましたか? パラメーター名: Castle.Facilities.WcfIntegration.WindsorServiceHostFactory`1..ctor のカーネル (IKernel カーネル) Castle.Facilities.WcfIntegration.DefaultServiceHostFactory..ctor() のカーネル