1

IISでC++ベースのWebServicesアプリケーションをホストしていますが、独自のC ++スレッドを開始しようとすると、IISが適切でクラッシュすることがわかりました。スレッドはboost.threadに基づいており、その下にある標準のWindowsスレッドAPIに明確にドリブルします。

スレッドを開始する必要がある理由は、ローカルキャッシュを最新の状態に保つために、中間層サーバーからのマルチキャストをリッスンするためです。私たちの話を聞くための別のプロセスを書くことを除いて、私は他に何ができるか途方に暮れています。

だから問題は、これはうまくいくべきかということです。IISでこの種のことを行うことには固有の制限がありますか?

4

4 に答える 4

3

それを開始するリクエストの存続期間よりも長く存続する永続スレッドを作成しているようです。それが ASP.NET C++/CLI、Managed C++、ISAPI 拡張機能またはフィルター、あるいは CGI であるかどうかについては触れていません。

概念的には、IIS によって呼び出されるコードは、要求の有効期間中のみ "有効" であると想定されています。長時間実行されるコードは、IIS のアプリケーション プールのリサイクルに翻弄されます。

最善の策は、通知をリッスンする別のプロセスを用意し、そのプロセスでキャッシュを維持することです。次に、共有メモリ ( Boost.Interprocessを参照) を使用して、Web サービスからそのキャッシュにアクセスできます。

于 2008-11-07T15:01:49.873 に答える
0

C ++についてはわかりませんが、C#ASP.NETアプリケーションでは、スレッドを作成していて、正常に機能しています。.NETは「実際の」スレッドですか?わかりません...しかし、スレッドが動作するように動作します。たぶん、アプリのその部分だけをASP.NET C#にすることができますか?

于 2008-11-07T11:44:07.307 に答える
0

私たちの話を聞くための別のプロセスを書くまでもなく、他に何ができるか途方に暮れています。

余分なスレッドを使用する以外にも多くの解決策があります。たとえば、ポーリング + ノンブロッキング IO は 1 つのオプションです。

于 2008-11-07T12:52:38.073 に答える
0

スレッドを作成することはおそらく問題ではありません。問題になる可能性があるのは、そのスレッドで行っていることです。IIS が作成するスレッドでも使用されるオブジェクトを共有するコードを調べます。

于 2008-11-07T13:39:46.230 に答える