1

我们在 IIS 中托管了一个基于 C++ 的 WebServices 应用程序,我们发现当我们尝试启动自己的 C++ 线程时,IIS 会出现故障并崩溃。这些线程是基于 boost.thread 的,它清楚地传递到下面的标准 Windows 线程 API。

我需要启动线程的原因是监听来自我们的中间层服务器的多播,以保持本地缓存的最新状态。没有为我们编写另一个流程来倾听我们,我不知道我还能做什么。

所以问题是,这应该工作吗?用 IIS 做这种事情有固有的限制吗?

4

4 回答 4

3

听起来您正在创建一个持久线程,它的寿命比启动它的请求的寿命长。您没有提及它是 ASP.NET C++/CLI、托管 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 将是一种选择。

于 2008-11-07T12:52:38.073 回答
0

创建一个线程可能不是问题——这可能是您在该线程中所做的事情。我将查看共享对象的代码,这些对象也被 IIS 创建的线程使用。

于 2008-11-07T13:39:46.230 回答