Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#(mono)Linux web服务器托管线程间具有一致的静态变量_C#_Linux_Mono_Webserver_Hosting - Fatal编程技术网

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

C#(mono)Linux web服务器托管线程间具有一致的静态变量,c#,linux,mono,webserver,hosting,C#,Linux,Mono,Webserver,Hosting,有人知道C#(mono)LinuxWeb服务器托管配置支持跨线程的一致静态变量(即不是每个线程实例的CGI模型)吗 详细信息 我有一些c#(mono)代码,我们需要在linux上作为简单web应用程序的一部分进行托管。我们不需要任何传统的asp甚至asp.NETMVC功能,实际上我们只需要能够基于共享静态变量使用动态内容响应特定URL 静态变量: 我们的一个特殊要求是,我们需要静态变量在所有传入请求中保留它们的值(与在使用ASP.net mvc应用程序的windows上的方法相同)。像Apach

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

详细信息

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

静态变量: 我们的一个特殊要求是,我们需要静态变量在所有传入请求中保留它们的值(与在使用ASP.net mvc应用程序的windows上的方法相同)。像Apache mod#u mono这样托管mono c#web应用程序的常见方式似乎是使用“每个线程的c#应用程序实例”模型,其中会有多个独立的c#应用程序实例,每个实例都有自己的静态变量。这是我们需要避免的问题。我需要一种托管c#应用程序的方法,该应用程序提供一个公共应用程序,其中包含所有传入请求都会看到的一组共享静态变量。如果应用程序在回收时重置了静态变量(就像在普通IIS/MVC中一样),只要回收不频繁就可以了


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

mod_mono不会为每个新的web请求生成新的mono进程。如果您将fastcgi服务器与apache或nginx一起使用,也不会出现这种情况

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

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


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

也许mod_mono可以与apache worker mpm(多线程)一起使用?apache中的默认值是prefork(多进程)。即使使用prefork,相同的流程也可以在回收之前为多个请求提供服务,因此您将在一段时间内共享静态数据。查看文档,我没有看到任何迹象表明会生成多个服务器。奇怪的是它会。解决这一问题的一个选择是独立启动Mono服务器,让Apache使用该正在运行的实例:您是否尝试过将xsp作为独立进程运行,而不是使用Apache Mod_Mono?@Glenn我们自2006年以来一直在生产站点上使用xsp。我们的主要经验是在Centos托管一系列Web服务的情况下使用它。我们发现它非常稳定,每天可以毫无问题地为数千个请求提供服务。它确实有一些未记录的“特性”,例如,当我们开始使用它时,生成wsdl时未正确处理可空类型。嗨,Glenn,你要求我提供输入,尽管我不确定是否仍然需要:)老实说,我对mod_mono没有太多经验。除了上面提到的简单使用XSP的选项(正如人们所看到的,用户体验是相当积极的,尽管我不确定您是否能够达到所需的性能),您还可以检查FastCGI mono服务器的行为。我感谢您的反馈,但我们似乎没有相互理解。我没有问过应用程序域之间的通信问题,我知道在单个应用程序域中,静态变量可以正常工作。另外,关于你对应用程序状态的建议,微软本身[链接到微软高性能博客:]为像我们这样的高性能应用程序推荐应用程序状态上的静态变量,我说过我不需要架构建议。您是否建议mod_mon将单个应用程序的每个线程划分为自己的应用程序域?(这与默认的IIS行为大不相同,也许可以解释您对静态变量的评论)。我想说的是,mod_mono(应该)的行为方式与IIS相同。其他一切都是一个错误。如果您的应用程序不能与mod_mono一起使用,那么它很可能也不能与xsp或nginx/fastcgi一起使用。这就是为什么给一个托管建议是不明智的,因为它不会解决你的问题。谢谢你的建议。我们目前没有遇到任何意外的行为,只是想确认我们可以预期mod_mono的不同托管风格在静态变量方面表现出与IIS相同的行为。网络上有一些旧的或不正确的报告表明mod_mono的行为有所不同。您的回答和其他人的评论似乎证实了好消息mod_mono应该是稳定的,并且与windows实现一致。感谢您的输入我感谢您对答案的编辑,因为它现在似乎准确地涵盖了主题,我将把它标记为答案。