ASP.NET上的Documents.Add失败(VB.NET)

时间:2011-03-24 09:25:10

标签: asp.net vb.net ms-word ms-office

我在使用ASP.NET MVC中的Microsoft Word打开文档时遇到问题。

这在我的开发人员计算机上完美运行,但在部署到IIS时则无效。

Dim word = New Microsoft.Office.Interop.Word.Application

'This line is failing to return a document object
Dim letter = word.Documents.Add(letter_doc_path)

'This line then fails due to [letter] being null
letter.MailMerge.OpenDataSource(csvPath)

我已将“组件服务”(dcomcnfg)中的权限添加到NETWORK SERVICE用户,该用户首先允许创建Word对象,但我完全不知道如何处理此对象。

我还尝试使用以下行来抑制Word对话框以防万一

word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone

没有错误没有帮助这个问题(显然除了空对象引用) - 也许有一种方法可以查询Word以获取特定的错误消息?

3 个答案:

答案 0 :(得分:4)

Word在打开任何文档时需要 normal.dot 模板文件,问题出现了,因为IIS用户没有任何地方可以创建normal.dot,因此它在后台失败。

通过为新创建的单词实例(创建它后立即)设置 UserTemplate路径来解决此问题。

路径必须是IIS用户可写的(在我的情况下是NETWORK SERVICE)。

word.Options.DefaultFilePath(Microsoft.Office.Interop.Word.WdDefaultFilePath.wdUserTemplatesPath) = working_folder

所以为了完整性,这里是包含获胜线的原始示例:

Dim word = New Microsoft.Office.Interop.Word.Application

'this line fixed it
word.Options.DefaultFilePath(Microsoft.Office.Interop.Word.WdDefaultFilePath.wdUserTemplatesPath) = working_folder

Dim letter = word.Documents.Add(letter_doc_path)

答案 1 :(得分:0)

答案 2 :(得分:0)

我遇到了同样的问题,Wheelibin建议的设置不足以使用NETWORK SERVICE帐户创建文档。

我最终做的是:

  • 为此创建一个用户帐户 在...下运行的过程。

  • 以用户身份登录并运行Word(此 在Word中执行各种设置任务 该应用程序不会尝试推杆 运行时的模态对话框 服务)。

  • 创建新的应用程序池并进行设置 要以用户帐户身份运行的池。

如果您使用的是Windows    身份验证,您的服务器是    Windows 2003(或2000,大概),    然后this issue适用,而你    需要改变SPN的    服务器,这将打破Windows    任何应用的身份验证    在不同的用户下运行    帐户,或者你必须切换    身份验证提供程序到NTLM    而不是Kerberos。

IIS 7可以使用内核模式身份验证来避免此问题。