2012-02-22 10 views
0

IIS 7.5とWindows 2008を使用してAppFabricでホストしているWCFサービスがあります。このサービスは、推奨されているように自動起動に設定されています。 サービスが開始されると、決して終了しないwhileループに入りますが、これが望ましい動作であることに留意してください。 whileループは、いつ利用可能になるか分からないデータを処理することになっています。IISまたはWebサイトが停止したことを識別する方法はありますか?

問題は、WebサイトまたはIISをシャットダウンするときにサービスが実行され続けることです。だから私の質問は次のとおりです:
IISやウェブサイトが停止したことを識別する方法はありますか?
この終わりのない行動を達成するより良い方法はありますか?

ここに十分な情報がありますように。

+4

whileループは何をするのか...あなたは無限ループを使用している理由として、ここでI二他人の懸念、しかしLearn IIS website

で利用できますか?なぜあなたはそれを持っている必要がありますか?この情報は、回答に役立ちます。 – usr

+0

おそらくWindowsサービスのホストですか? –

+0

usrの質問に加えて、なぜサービスを永遠にループさせたいのですか?それは間違っているようです。 – NotMe

答えて

0

[OK]をクリックすると、無限のポーリングループが実行されます。このデザインは珍しいが、意味をなさすかもしれない。

ポーリングを行う別のスレッドを開始することをお勧めします。スレッドのコードは次のようになります。

void ThreadProc() { 
try { 
    while(true) { ... } 
} 
catch (ThreadAbortException) { 
    //AppDomain shutdown 
} 
} 

すべてのスレッドをシャットダウンすると、中止されます。これはシャットダウンを検出するトリックです。 Webサイトの状態検出問題とみなして

new Thread(ThreadProc) { IsBackground = true } 
+0

私はこのアプローチを試みますが、ここではいくつかの考えがあります。私はThreadAbortExceptionが存在するとは思わない、私はそのサービスがAppFabric上で完全にホストされていると信じています。エラー、または奇妙な振る舞いをしている可能性がありますし、多分私はそれに私を助けてくれることにつながることができるイベントがあります。 – Oakcool

+0

ホスティングプロセスが強制終了された場合、受信するイベントはありません。プロセスは*になります*。この場合、通知を受け取ることはできません。 – usr

0

は、このようなスレッドを起動

あなたはサイト名がわかっている場合は、サイトが開始されたかどうかを決定するためにMicrosoft.Web.Administration APIを使用することができます。いくつかの良い例が

+0

私が提案したように私は述べていますが、データを処理する時期を知るためにポーリングを行っている理由があります。サービスは実際に私が所有していない別のサービスに連絡するので、いつ使用されたのかわかりません。 – Oakcool

+0

私は参照してください。だから誰かがあなたのサービスを呼び出すと、それが応答して他のサービスに連絡します。もしそうなら、無限に何かを待つ必要があるのはなぜですか?要求が到着したときにWCFを使用する全体のポイントがWeb要求を処理し、データを処理しているようです...何かが不足していますか?それにもかかわらず、上記のMicrosoft.Web.Administration APIを使用してサイトが稼動しているかどうかを検出できるはずです。 –

+0

サービスは、Windowsサービスのように動作します。サービスは、WCFの「APPFABRIC」を使用しているWindowsサービスの代わりに、同じものとみなされます。だから、誰もそれを呼んでいない、自立している、常時稼働している、適切な情報が見つかるのを待っているデータをポーリングした後、何らかの処理が行われる。 – Oakcool

関連する問題