如何在ASP中控制多个连接.. NET网页

本文关键字:连接 NET 网页 控制 ASP | 更新日期: 2023-09-27 18:12:43

我有网页索引Aspx和相应的服务器端代码。这个c#代码有一个方法,不能并行执行,如果多个客户端连接到我的网站。我该如何限制它?

方法的作用如下:它创建一个文件夹,将其压缩,并使用户可以下载。我的要求是,当一个用户执行此方法时,其他用户不应该这样做,因为它会再次创建相同的文件夹,从而导致数据损坏。

我尝试使用会话对象。但是我知道会话对象是基于每个客户端存储的。

有谁能给我一些建议吗?

如何在ASP中控制多个连接.. NET网页

我的直接建议是:为每个请求创建一个随机文件夹名称,这将允许您同时运行它们。但是,如果这不是一个选项,那么您将需要使用lockMutex之类的东西进行同步。然而,只有当您从当前请求返回结果,而不是将其压缩到一个请求中,并让他们在下一个请求中下载时,这才会工作得很好。

坦率地说,我认为您应该在请求zip时执行zip。事实上,除非文件非常大,否则您甚至不需要接触文件系统—您可以使用MemoryStream和任何zip编码器(例如System.IO.Packaging.ZipPackage)在内存中创建压缩文件—然后只需将MemoryStream的数据交给客户端。

如果你正在使用MVC,这只是return File(contents, contentType)。用普通的ASP。

应用上下文或静态类是应用范围的。因此,您可以存储一个指示进程已经启动的标志。进程结束后,可以删除标志。

http://msdn.microsoft.com/en-us/library/94xkskdf (v = vs.100) . aspx

并且当您写入应用程序状态时始终使用Application.Lock,当您使用静态类时始终使用lock(mutex)

在你的情况下,静态类将是一个更好的解决方案,因为似乎应用程序上下文只存在于与经典asp兼容的目的:使用静态变量代替asp中的应用程序状态。净
static object mutex= new object();
lock(mutex)
{
   //Do the work
}

如果你使用经典的asp.net会话,你不需要做任何事情,因为会话已准备好锁定来自多个用户的页面运行。

如果你没有,那么你可以按照Marc的建议,使用Mutex

关于会话锁:
Web应用程序在处理另一个Web应用程序共享相同会话时被阻塞
jQuery Ajax调用web服务似乎是同步的
ASP。. NET服务器不异步处理页
完全替换ASP.Net's会话