Mircosoft建议不要使用办公工具的服务器端自动化(
Considerations for server-side Automation of Office)
但是,我看不到其他选择.我正在尝试做的是将vsd文件转换为html(超链接的图像映射).这在
Aspose.Diagram尚不可能,这里引用了类似问题的答案.将在LibreOffice 3.5中使用的
LibVisio尚未完成,也不支持超链接.
还有什么我可以尝试的吗?
如果不是:任何关于如何为ASP.NET Web服务设置访问权限以使其可以访问visio而不是主要安全风险的提示将不胜感激. (一个教程只是将其设置为冒充系统管理员帐户,这对我来说听起来有点危险)
最佳答案 办公自动化和网络应用程序的主要问题很简单,办公程序并不是设计为同时执行多个副本.如果在Web请求之后立即执行Visio或其他Office程序,可能会遇到什么类型的共享内存问题.这些应用程序的内存占用量不足以处理10个甚至100个同时连接.此外,请求浏览器可能因任何原因而消失,并且确实没有阻止应用程序执行的好方法.
考虑到这一点,只要您限制应用程序,就可以获得成功.一种方法是使用Web服务设置一种排队系统,这样Visio就不会在服务器上多次实例化.
我要做的是建立一个“visio服务器”.意味着安装了visio的单独机器.然后我会编写一个控制器应用程序,其目的是从队列堆栈中取出一个作业,运行作业并保存结果.这样,您可以确保一次只能运行一个作业,因此一次只能运行一个Visio副本.请注意,这整齐地处理了一些许可问题.
因此,Web应用程序会将作业发布到数据库队列.控制器将轮询这些作业,并在找到它们时执行它并存储结果.冲洗并重复.
Web应用程序可以轮询数据库以查看结果何时准备好并将其提供给用户.可能是某种类型的Ajax页面每15秒检查一次.或者,用户可以通过电子邮件发送结果,或者他们可以“稍后再回来查看”……
作为旁注,这可以避免任何类型的安全风险,因为控制器和visio将在单独的机器上运行.这个单独的机器不需要任何其他权限,只需简单地执行visio并从数据库中提取作业信息.所以,即使你有某种类型的流氓visio东西,它的损害仅限于那台机器.