4

有人知道 C#(单声道)Linux Web 服务器托管配置,它支持跨线程的一致静态变量(即不是每个线程实例的 CGI 模型)吗?

细节

我有一些 c#(单声道)代码,我们需要将它们作为简单 Web 应用程序的一部分托管在 linux 上。我们不需要任何传统的 asp 甚至 asp.net mvc 功能,实际上我们只需要基于共享静态变量以动态内容响应特定 url 的能力。

静态变量: 我们确实有一个特殊要求是我们需要静态变量来在所有传入请求中保留它们的值(就像它们在具有 ASP.net mvc 应用程序的 Windows 上所做的一样)。托管像 Apache mod_mono 这样的单声道 c# Web 应用程序的常用方法似乎使用“每个线程的 c# 应用程序实例”模型,其中我们的 c# 应用程序有多个独立的实例,每个实例都有自己的静态变量。这是我们需要避免的问题。我需要一种托管 ac# 应用程序的方法,该方法为一个通用应用程序提供一组共享的静态变量,所有传入请求都会看到这些变量。如果在应用程序回收时静态变量被重置(就像在正常的 IIS/MVC 中一样),只要不经常回收就可以了。

背景是这个网络应用程序需要将大量数据保存在 RAM 中的静态变量中,并快速回答有关该数据的问题。为每个线程打开应用程序的副本会过多地限制 RAM 资源,并且频繁地将数据重新加载到内存中会使应用程序变得太慢(像 IIS/Asp.net MVC 这样的偶尔回收很好)。该系统在 Windows/IIS7 上运行得非常好(每秒 50,000+ 个动态请求),我们不想更改此架构,因此我正在寻找的答案与托管而不是更改应用程序设计有关。

4

1 回答 1

2

mod_mono 不会为每个新的 Web 请求生成新的单声道进程。如果您将 fastcgi 服务器与 apache 或 nginx 一起使用,它也不会。

编辑:静态变量在同一个应用程序域中共享。这适用于 Microsoft .NET IIS 和 mono(无论您使用的是 mod_mono、xsp 还是 mono-fastcgi-server)。即使 apache 产生多个工作线程并且单个请求由单个工作线程处理,在任何给定时间也只有一个单进程运行(除非您配置了多个 asp.net 应用程序,那么每个应用程序都有一个) .

Mono 也尝试为 ASP.NET 实现 100% 的兼容性,因此设计上没有不同的行为!

您的程序在 linux 上的不同行为很可能与 mod_mono 如何处理请求无关,而是与 mono 本身或您的代码中的错误有关(即,通过做出在 linux 上不成立的平台假设)。您应该真正使用 MonoDevelop/xsp 进行调试,并尝试更清楚地查明问题,或者在此处粘贴一些示例代码。

于 2012-12-01T15:14:45.583 回答