我的应用程序使用Microsoft.Office.Interop.Excel服务生成excel报告并以PDF格式下载。如果多个用户请求同一页面i:e;相同的服务然后第一个用户能够获得结果,但后一个用户生成一些异常。我们可以通过为每个用户提供单独的线程来避免这种情况吗?如果一个正在运行,那么其他人必须等待几秒钟。
以下是我的代码:
protected void btn2games_Click(object sender, ImageClickEventArgs e)
{
myfilepath = "acd.xlsx";
try
{
string sr = Server.MapPath(myfilepath.ToString());
if (File.Exists(myfilepath))
{
File.Delete(myfilepath);
}
}
catch
{
}
ExceltoPdf();
}
protected void ExceltoPdf()
{
//here the code goes : to fetch data from DB and write to Excel using Office.Interop.Excel
}
答案 0 :(得分:1)
Office库未获得服务器许可(我最后检查过),并且COM Interop接口不是线程安全的。尝试在Web应用程序中使用它们是不明智的。
除了许可问题,您可以创建一个排队系统,允许将请求提交给系统(可能是Windows服务),该系统一次一个地处理请求,或者可能旋转一个要同时处理多个请求的子进程数(不是线程...进程)。
但是,这可能不值得工程师的努力。如果您使用Google“Excel to PDF”,您会发现很多第三方组件可用于服务器环境。由于缺乏直接经验,我不能推荐任何特定的。