项目中上传的word文件网页预览,采用的是word转换成html文件的方式,服务器端需要的配置:
1.服务器电脑安装office,我的项目安装的是office2013,确保Microsoft Word下的”.Net可编程性支持“已安装,Office共享功能下的"Visual Basic for Applications"已安装,doc和docx都可以转换
网站发布后报异常:COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问
这个异常报出后,我查找网上的解决方案逐一尝试,最终消除异常。尝试的解决方案有:
2.点击Win +R键输入comexp.msc -32(如果按钮的Word是64位的输入dcomcnfg.exe)回车,找到"组件服务---"计算机"---“我的电脑”---"DCOM配置",找到"Microsoft Word 97 - 2003 文档"右键属性。
在"标识"一栏选择"交互式用户"。
在"安全"一栏可以看到“启动与**”组,选择"自定义",点击"编辑"按钮,添加NetWork Service、IIS_IUSRS用户,给于"本地启动","本地**"权限。
在“访问权限"组中,选择"自定义",点击"编辑"按钮,添加NetWork Service、IIS_IUSRS用户,给于"本地访问"权限。
3.修改IIS的应用程序池,选择你的项目,点击高级设置,标识改为:LocalSystem 或NetworkServer;
设置到这一步,之前在windows server2008服务器上配置后问题就解决了,但是更换成windows server 2012后,依然报COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问 异常,在我本地的win10系统上测试,也还是报这个异常。所以网上许多解决方案有人说有用有人说无用,是电脑本身的环境问题(可能与IIS的版本有关),不清楚当前电脑还有哪个环节被限制了。
4.在网站web.config文件的<system.web></system.web>中添加<identity impersonate="true" userName="当前用户名" password="xxxxxxx" />
这一步设置完成后,之前的异常总算是消除了(这行代码之前的网站是没有的,依然能正常运行)
配置到这一步,我本地的测试电脑(win10系统),网站功能已经能正常运行了,但是公司服务器(windows server 2012)依然报异常:未将对象引用设置到对象的实例
这个异常太广泛了,逐步输出调试,判断出出问题的代码为:
Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open",
System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName, true, true });
此时doc 取得的是null值。
查找解决方案,花了大半天的时间,终于解决了,方法为:
5.在"C:\Windows\SysWOW64\config\systemprofile\"目录下创建一个"Desktop"目录,目录赋予”NetWork Service“用户完全控制权限。
至此,公司的新服务器终于能将word转换成html文件了。哎,明明第一次配置没有花这么多时间,网上随便几个解决方案就解决了问题的。所以还是要记录,否则每次遇到的问题都是新问题。