我在理解IIS如何处理其线程上的静态变量时遇到了一些麻烦.我的理解一直是,如果IIS有4个工作进程,它可以同时处理4个请求,并且它与运行网站的4个独立线程相同.任何静态变量都会在每个单独的线程中保留.我有点困惑的原因是我有一个我管理连接和缓存事务的范围.当我测试应用程序时,我没有注意到任何问题,但在我编译它并同时从两个不同的位置点击它后,我似乎遇到了一些冲突.现在,如果这些工作流程是分开的,为什么会这样?可以同时在单个工作线程上处理多个请求吗?这非常重要,因为在这些静态成员中存在唯一的ID来处理管理这些功能的对象的升级,并且看起来他们正试图访问同一个对象.
我在x64机器上的Vista的IIS服务器上运行它.
编辑
对于需要在单个请求中持久保存线程的值,我将这些值放入Web.HttpContext.Current.Items其中似乎可以解决问题.
<ThreadStatic()>可以使用但在请求过程的完整性期间可能无法使用.在我拥有的一个模块中,仅用于变量以指示该线程是否已加载cahcing服务器的设置.如果为true,则说明(不是asp.net)准备从缓存服务器获取数据.
我在PostgreSQL中有如下查询:
UPDATE
queue
SET
queue.status = 'PROCESSING'
WHERE
queue.status = 'WAITING' AND
queue.id = (SELECT id FROM queue WHERE STATUS = 'WAITING' LIMIT 1 )
RETURNING
queue.id
Run Code Online (Sandbox Code Playgroud)
并且许多工人尝试一次处理一项工作(这就是为什么我有限制1的子查询).在此更新之后,每个工作人员都会获取有关id的信息并处理工作,但有时他们会抓取相同的工作并处理两次或更多次.隔离级别为Read Committed.
我的问题是如何保证一件作品要处理一次?我知道那里有很多帖子,但我可以说我已经尝试了大部分帖子但它没有帮助();
AND pg_try_advisory_xact_lock(queue.id)外部查询的WHERE子句,但是...... [?]任何帮助,将不胜感激.
当我在IIS7.5中查看站点的功能视图时,IIS组中没有工作进程图标。我是否需要配置设置或安装功能/角色以使其显示?
我在 Web 服务器中的 IIS 8.5 上部署了一个 ASP.NET MVC 应用程序,我想知道这两个功能之间的差异,以设置“空闲超时操作”。
如果进程被挂起,进程使用的内存和资源是否被移除和释放?我认为删除和释放用于避免内存泄漏的内存很好,所以我通常使用终止功能。
我的一个IIS应用程序池进程有一个非常奇怪的问题.我最近得到了一个System.OutOfMemoryException错误,并且我一直试图找出究竟发生了什么.基本上我有一个脚本,它使用Web服务从我们的DAM获取文件.然后检查文件存储一个字节数组,然后使用Response输出文件.唯一一个遇到问题的是PDF,当它们超过20MB时,它们似乎有时会导致错误.如果我增加应用程序池中的内存,它会暂时解决问题.我看了w3wp.exe进程,看到有时当我运行这个脚本时,它会将内存增加到400MB,我们拥有的最大文件是45MB,这将导致这种类型的行为发生.问题似乎每天晚上都会消失,早上它会工作一段时间然后再开始做同样的事情.这个应用程序是c#asp.net应用程序.它在sharepoint内部运行.
在观看了一段时间后,我注意到,由于这些PDF在浏览器窗口中呈现,直到文件完全下载,它才会从内存中释放.这是有道理的,但我可以看到这有点像我的问题.如果我有几个人加载文件,平均(没有文件下载)内存使用量为385,000 kb.它可以轻松达到900,000-1,100,000 KB,这是应用程序池的限制.
我不是在寻找一个确切的答案,而是更像是一个方向,因为我完全没有想法.