C# (mono) Linux Web 服务器托管,跨线程具有一致的静态变量

标签 c# linux mono webserver hosting

有人知道 C#(单声道)Linux 网络服务器托管配置可以跨线程启用一致的静态变量(即不是每个线程一个实例的 CGI 模型)吗?

详情

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

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

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

最佳答案

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

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

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

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

关于C# (mono) Linux Web 服务器托管,跨线程具有一致的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480328/

相关文章:

c# - Mono for Android 库中的 Resources 文件夹

c# - 无法检查两个时间字段中是否存在时间(MySQL、C#、Windows 表单应用程序)

c# - 执行应用程序所需的库 'hostpolicy.dll'

python - Visual Basic 开发人员想要编写 Linux 应用程序

macos - 使用 MonoMac 在 OSX 上进行屏幕捕获?

c# - "ref"可以用作类之间的持久链接吗?

c# - 将 DataRow[] 转换为 DataTable 而不会丢失其 DataSet

c# - 在 C++ 中使用 C# dll 时出现 C2380 错误

linux - 虚拟内存真的存在吗?

python - Linux 上的 Pylint `--good-names` 语法