有没有人知道C#(单声道)Linux Web服务器托管配置能够跨线程实现一致的静态变量(即不是每个线程的实例的CGI模型)?
详情
我有一些c#(单声道)代码,我们需要在Linux上托管作为简单的Web应用程序的一部分。我们不需要任何传统的asp甚至asp.net mvc功能,实际上我们只需要能够根据共享的静态变量响应具有动态内容的特定URL。
静态变量 我们要做的一个特殊要求是我们需要静态变量来保留所有传入请求的值(与使用ASP.net mvc应用程序的窗口相同)。托管单个c#web应用程序(如Apache mod_mono)的常用方法似乎使用“每个线程的c#应用程序实例”模型,其中我们的c#应用程序的多个独立实例各自具有自己的静态变量。这是我们需要避免的问题。我需要一种托管c#应用程序的方法,该应用程序为一个公共应用程序提供一组共享的静态变量,所有传入的请求都会看到。如果应用程序回收静态变量重置(就像在普通的IIS / MVC中一样),只要回收很少,这是可以的。
背景是这个Web应用程序需要在静态变量中将大量数据保存在RAM中,并快速回答有关该数据的问题。为每个线程打开应用程序的副本会限制RAM资源过多,并且经常将数据重新加载到内存会使应用程序太慢(偶尔回收像IIS / Asp.net MVC一样很好)。该系统在Windows / IIS7上运行得非常好(每秒50,000+动态请求),我们不想要改变这种架构,所以我正在寻找的答案与托管不改变应用程序设计有关。
答案 0 :(得分:2)
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处理请求的方式无关,而是单声道本身或你的代码中的一个错误(即通过制作一个在linux上不成立的平台假设)。您应该使用MonoDevelop / xsp进行调试,并尝试更清楚地查明问题,或者在此处粘贴一些示例代码。