使用每个用户的线程来访问公共服务

时间:2012-04-04 08:22:37

标签: .net multithreading excel ms-office

我的应用程序使用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

}

1 个答案:

答案 0 :(得分:1)

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

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

但是,这可能不值得工程师的努力。如果您使用Google“Excel to PDF”,您会发现很多第三方组件可用于服务器环境。由于缺乏直接经验,我不能推荐任何特定的。