2

いくつかの WCF エンドポイントをホストするマネージド Windows サービスがあります。PC の再起動時にサービスが自動的に開始されるように設定されています。再起動すると、次のコード行が見つかります。

ServiceHost wcfHost1 = new ServiceHost(typeof(WCFHost1));

サービスの OnStart() メソッドでは、実行に 15 ~ 20 秒かかります。実際には、そのようなステートメントが 2 つありますが、2 番目のステートメントはすぐに実行されます。こんなに時間がかかるのは初めてです。ボトルネックの原因を知っている人はいますか? このため、呼び出しが 30 秒を超える場合があり、その結果、SCM は初期化中にサービスがタイムアウトしたと見なします。これで、スレッドをスピンオフしてこれを実行し、OnStart() からすぐに戻るのは簡単ですが、この遅延の原因を知りたいです。

これは、PC の再起動時にサービスが起動したときにのみ発生します。PC が稼働している場合、サービスは 1 秒以内に開始および停止します。

4

3 に答える 3

0

起動に長い時間がかかったWindowsサービスに問題がありました。使用した署名付きアセンブリ(エンタープライズライブラリ)が原因であることがわかりました。.NETは、アセンブリのロード時にAuthenticode署名を検証しようとしていました(おそらく、コンストラクターがそのアセンブリのロードを引き起こすタイプを初めて使用している可能性があります)。app.configに以下を追加してみてください。それが機能しない場合は、別の問題があります。

<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

http://support.microsoft.com/kb/936707および.NetアプリがVerisignに接続するのはなぜですか

于 2010-06-25T07:10:21.737 に答える
0

これにより、より多くの助けが得られる場合があります。基本的に、依存関係を把握してサービスに追加する必要があると思います。

これは暗闇でのショットにすぎませんが、.net フレームワークがまだ読み込まれていない可能性があります。おそらく、自動開始を遅延自動開始に設定してみてください。これにより、.net フレームワークやその他の Windows サービスの開始時間が可能になります。

また、.net アプリケーションが起動すると、Just-In-Time コンパイラでコンパイルされます。これは、.net がコンパイルするのを待っている可能性があります。

最後に、使用している WCF インスタンスの種類によっては、コンストラクターの初期化に時間がかかるという問題が発生する可能性があります。

お役に立てれば。

于 2010-04-28T01:30:56.130 に答える
0

WCF サービスに問題はありません。問題を解決する最善の方法は、クライアントが何よりも先に呼び出す必要があるダミー操作を作成することです。これにより、クライアントは、実際のトランザクションの前にサービスでハンドシェイクを行う必要があります。実際にダミー操作を使用して、時々サービスを呼び出して、サービスがまだ生きているかどうかを確認しました。

于 2010-07-07T01:20:12.230 に答える