小编典典

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

linux

有人知道C#(单机)Linux Web服务器托管配置可在线程之间启用一致的静态变量(即每个线程实例的CGI模型)吗?

细节

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

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

背景是此Web应用程序需要在静态变量中的RAM中保存大量数据,并快速回答有关该数据的问题。为每个线程打开应用程序副本会限制RAM资源太多,而频繁地将数据重新加载到内存中会使应用程序速度太慢(可以使用IIS
/ Asp.net MVC之类的偶尔回收)。该系统工作得非常好在Windows / IIS7(每秒50,000动态请求),我们
希望改变这种结构,所以我在寻找答案涉及到托管不改变应用程序的设计。


阅读 320

收藏
2020-06-03

共1个答案

小编典典

mod_mono不会为每个新的Web请求生成一个新的Mono进程。如果将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进行调试,并尝试更清楚地指出问题所在,或在此处粘贴一些示例代码。

2020-06-03