Web services 第一次从ASP.NET webservice打印时Excel挂起

Web services 第一次从ASP.NET webservice打印时Excel挂起,web-services,excel,printing,asmx,com-interop,Web Services,Excel,Printing,Asmx,Com Interop,我们正在使用Excel将ASP.NET Web服务中的SpreatSheetML转换为XLS。此外,如果用户选中正确的复选框,我们将生成一个线程,该线程使用Excel打印电子表格 最近,我们在一个新的环境中部署了该应用程序,然后我们开始遇到问题:当有人第一次尝试打印时,Excel似乎挂在服务器上-即对工作簿上的PrintOut方法的调用永远不会返回 但是,如果我们以应用程序池身份登录到服务器并打开Excel,将某些内容发送到打印机,然后再次关闭它,从那时起,打印将正常工作 我怀疑Excel显示了

我们正在使用Excel将ASP.NET Web服务中的SpreatSheetML转换为XLS。此外,如果用户选中正确的复选框,我们将生成一个线程,该线程使用Excel打印电子表格

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

但是,如果我们以应用程序池身份登录到服务器并打开Excel,将某些内容发送到打印机,然后再次关闭它,从那时起,打印将正常工作

我怀疑Excel显示了一个
不可见对话框
——症状与我们之前的症状相同,当时Excel似乎在打开Excel时出现的“无法使用对象链接和嵌入”对话框上暂停

我知道使用服务器端办公自动化很糟糕,但这是一个很难更改的遗留应用程序,所以请不要只是建议我重新设计我们的解决方案

有人有过这种行为吗?

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

您可以下载评估


免责声明:我拥有SpreadsheetGear LLC

嗯,似乎没有人遇到过这个问题

真正奇怪的是,我的夜间作业(普通的.NET.exe)完全可以打印——只有我的web服务有这个问题

因此,我通过做很久以前就应该做的事情解决了这个问题:我用创建了一个简单的Windows服务,它响应一些MSMQ消息并进行打印,然后我的web服务可以通过消息队列订购打印输出

各方面都好得多

像许多人一样,我也见过这种行为。这是由于在服务器(尤其是多线程ASP.NET应用程序)中使用Office API造成的

然而,你说过你不想知道不射中自己的脚,所以没什么好说的了。你似乎被早先的愚蠢行为所带来的后果所困住了


好的,如果你听过这个,请阻止我:

一个人问了一个关于StackOverflow的问题。他说,“所以,当我从一个服务内部自动化一个Office应用程序时,糟糕的事情就会发生。”。因此,John Saunders说,“所以,不要从服务内部自动化Office应用程序,而是从桌面应用程序内部自动化它,就像Microsoft打算做的那样。”

当请求需要Excel时,您应该创建一个运行Windows窗体应用程序的进程。应用程序可能必须在没有窗口的情况下启动,或者您可能需要在连接的上下文中启动它。在任何情况下,要执行的任务都可以作为命令行参数传递,或者程序可以承载WCF服务,以便向其发送命令

这个程序可以调用Excel,就像Excel希望调用的那样。它甚至可以处理多个Excel命令(一次一个)。但是,如果它挂起,则可以终止进程并启动另一个进程


我从未尝试过这种方法,但听起来它比尝试让Office Automation去做它本来不打算做的事情要好。

我使用Microsoft Excel时遇到了无数问题(性能差、挂起进程、进程崩溃等),Word和PowerPoint通过web服务中的互操作将Office文档打印为PDF格式。我也遇到过一些问题,我怀疑这些问题是由于不可见的对话框造成的(可能是文件已损坏、已设置只读建议、文件受密码保护等等)

我知道有些工具不使用Office,但它们非常昂贵。我的解决方案是切换到自动化OpenOffice。OpenOffice似乎更加稳定,我已经将挂起的流程等抛在脑后


所以,虽然我想我说的是“不要自动化Microsoft Office”,但我并不是建议你完全放弃自动化;只是我在自动化OpenOffice方面比Microsoft Office成功得多。

我知道我们已经伤到了自己的脚,我只是在问如何最好地恢复:)我的意思是我不能使用像“不要使用Office自动化”这样的答案-也就是说,我在寻求建设性的答案。你听过老亨尼年轻人的笑话:一个男人去看医生,他说,“医生,我这样做会痛的”,医生说,“那就不要那样做!”。你说你在打自己的脚,你问如何避免粉末烧伤和弹孔,但你不肯放下枪。OpenOffice有可能是为了在服务器环境中实现自动化而设计的。可以肯定的是,微软Office并不是这样。