0

WAS (i​​is7 の 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() のカーネル

4

1 に答える 1

1

問題は、global.asax とそのすべてのメソッドが HTTP 処理にのみ関連していることです。ところで。HttpApplicationclass in global.asax は、これをかなり明確にするために派生したものです。アプリケーションを WAS (net.tcp ベースのバインドの場合) でホストすると、これらのメソッドを使用できなくなります。AppInitializeのようなものを使用してみてください。

于 2011-04-21T10:20:56.053 に答える