首次从ASP.NET webservice打印时,Excel挂起

我们正在使用Excel将SpreatSheetML转换为ASP.NET webservice中的XLS。 而且,如果用户检查了正确的checkbox,我们产生了一个使用Excel打印电子表格的线程。

最近,我们已经在一个新的环境中部署了应用程序,然后我们开始遇到问题:第一次有人试图打印时,Excel似乎挂在服务器上 – 即对工作簿上的PrintOut方法的调用永远不会返回。

但是,如果我们以应用程序池身份login到服务器并打开Excel,请将某些内容发送到打印机,然后再closures它,打印将从此继续进行!

我怀疑Excel正在显示一个invisible dialog – 症状和我们之前的一样,当Excel打开时出现“不能使用对象链接和embedded”对话框时,Excel似乎停滞不前。

我知道,使用服务器端的Office自动化是不好的,但这是一个很难改变的遗留应用程序,所以请不要只是build议我重新devise我们的解决scheme。

有没有人有这种行为的经验?

那么,似乎没有人有这个问题。

真奇怪的是,我的夜间工作(普通的.NET.exe)完全有能力打印 – 这只是我的Web服务有这个问题。

所以我早就做了我应该做的事情来解决问题:我用Topshelf做了一个简单的Windows服务,它响应一些MSMQ消息并进行打印,然后我的Web服务可以通过消息队列来打印输出。

在各方面更好!

使用Microsoft Excel,Word和PowerPoint,通过在Web服务中进行互操作,将Office文档打印为PDF格式,从而解决了性能问题,性能下降,进程崩溃等问题。 我也遇到了一些问题,我怀疑是因为看不见的对话框(也许文件已损坏,只读推荐已设置,文件是密码保护,或其他)。

我知道有些工具不能使用Office,但是它们非常昂贵。 我的解决scheme是切换到自动化OpenOffice。 OpenOffice似乎更加稳定,而且我留下了悬挂的进程等等。

所以,虽然我想我说的是“不要自动化微软Office”,但我并不是说你完全放弃了自动化; 只是我比OpenOffice有更多的成功自动化OpenOffice。

SpreadsheetGear for .NET可以读取xls或xlsx工作簿,并可以在不显示任何对话框的情况下打印到默认打印机(请参阅WorkbookView.Print()方法)。

你可以在这里下载评估。

免责声明:我自己的SpreadsheetGear LLC

像很多人一样,我看到了这样的行为。 这是由于在服务器中使用Office API导致的,特别是在multithreading的ASP.NET应用程序中。

不过,你已经说过你不想知道自己不在脚下,所以没什么可说的。 你似乎被前面愚蠢的后果困住了。


好的,如果你听说过这个 ,就阻止我吧:

一个人在StackOverflow上提出一个问题。 他说:“所以,当我从一个服务中自动运行一个Office应用程序时,就会发生坏事。” 所以,约翰·桑德斯(John Saunders)说:“所以,不要从服务内部自动运行Office应用程序,从Microsoft桌面应用程序内部自动执行它,就像微软打算做的那样。

当请求来到需要Excel的东西时,您应该创build一个运行Windows Forms应用程序的进程。 应用程序可能必须以无窗口启动,或者您可能需要在远程桌面连接的上下文中启动它。 在任何情况下,要执行的任务都可以作为命令行parameter passing,或者程序可以托pipeWCF服务来发送命令。

这个程序可以调用Excel就像Excel期望被调用。 它可能甚至可以处理多个命令到Excel(一次一个)。 但是,如果挂起,这个过程可能会被杀死,另一个就会开始。

我从来没有试过这个,但是听起来好像比试图让Office自动化去做一些没有devise的事情更好。