0

私のアプリケーションは Microsoft.Office.Interop.Excel サービスを使用して Excel レポートを生成し、PDF としてダウンロードします。複数のユーザーが同じページをリクエストした場合、i:e; 同じサービスの場合、最初のユーザーは結果を取得できますが、後のユーザーは何らかの例外を生成します。各ユーザーに個別のスレッド 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

}
4

1 に答える 1

1

Office ライブラリはサーバーでの使用が許可されておらず (最後に確認しました)、COM 相互運用インターフェイスはスレッドセーフではありません。それらを Web アプリケーションで使おうとするのは賢明ではありません。

ライセンスの問題は別として、要求を一度に 1 つずつ処理するシステム (おそらく Windows サービス) に要求を送信できるようにするキューイング システムを作成するか、複数の子プロセス (スレッドではなく...プロセス) を使用して、複数の要求を同時に処理します。

ただし、おそらくそのエンジニアリングの努力に見合う価値はありません。「Excel to PDF」を Google で検索すると、サーバー環境で使用するためのサードパーティ製コンポーネントが多数見つかります。直接の経験がないため、特定のものをお勧めすることはできません。

于 2012-04-04T08:30:37.443 に答える