0

我的应用程序使用 Microsoft.Office.Interop.Excel 服务生成 Excel 报告并下载为 PDF。如果多个用户请求同一页面,即:相同的服务,那么第一个用户能够获得结果,但后一个用户会产生一些异常。我们可以通过为每个用户提供单独的线程来避免这种情况吗?如果一个正在运行,那么另一个必须等​​待几秒钟。

这是我的代码:

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

}
4

1 回答 1

1

Office 库未获得服务器使用许可(我上次检查过),并且 COM 互操作接口不是线程安全的。尝试在 Web 应用程序中使用它们是不明智的。

除了许可问题,您可以创建一个排队系统,允许将请求提交给系统(可能是 Windows 服务),该系统一次处理一个请求,或者可能启动多个子进程(不是线程......进程)同时处理多个请求。

不过,这可能不值得进行工程方面的努力。如果你用谷歌搜索“Excel to PDF”,你会发现相当多的第三方组件打算在服务器环境中使用。由于缺乏直接经验,我不能推荐任何具体的。

于 2012-04-04T08:30:37.443 回答