visio服务器端自动化的替代方案

时间:2012-01-17 21:07:55

标签: asp.net automation visio

Mircosoft建议不要使用办公工具的服务器端自动化(Considerations for server-side Automation of Office) 但是,我看不到其他选择。我试图做的是将vsd文件转换为html(图像+地图的超链接)。这在Aspose.Diagram中尚不可能,这里引用了类似问题的答案。在LibreOffice 3.5中使用的LibVisio尚未完成,也不支持超链接。

还有什么我可以尝试的吗? 如果不是:任何关于如何为ASP.NET Web服务设置访问权限以使其可以访问visio而不是主要安全风险的提示将不胜感激。 (一个教程只是将其设置为冒充系统管理员帐户,这对我来说听起来有点危险)

1 个答案:

答案 0 :(得分:2)

办公自动化和网络应用程序的主要问题在于,办公程序并非旨在同时执行多个副本。如果在Web请求之后立即执行Visio或其他Office程序,可能会遇到什么类型的共享内存问题。这些应用程序的内存占用量不足以处理10个甚至100个同时连接。此外,请求浏览器可能因任何原因而消失,并且确实没有阻止应用程序执行的好方法。

考虑到这一点,只要你限制应用程序就可以成功。一种方法是使用Web服务设置一种排队系统,这样Visio就不会在服务器上多次实例化。

我要做的是设置“visio服务器”。意味着安装了visio的单独机器。然后我会编写一个控制器应用程序,其目的是从队列堆栈中取出一个作业,运行作业并保存结果。这样,您可以确保一次只能运行一个作业,因此一次只能运行一个Visio副本。请注意,这可以很好地处理一些许可问题。

因此,Web应用程序会将作业发布到数据库队列。控制器将轮询这些作业,并在找到它们时执行它并存储结果。冲洗并重复。

Web应用程序可以轮询数据库以查看结果何时准备好并将其提供给用户。可能是某种类型的Ajax页面每15秒检查一次。或者,用户可以通过电子邮件发送结果,或者他们可以“稍后再回来查看”......

作为旁注,这可以避免任何类型的安全风险,因为控制器和visio将在单独的机器上运行。这个单独的机器不需要任何其他权限,只需简单地执行visio并从数据库中提取作业信息。所以,即使你有某种类型的流氓visio东西,它的损害仅限于那台机器。