[英]Documents.Add fails on ASP.NET (VB.NET)
我在使用來自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)
我已經向NETWORK SERVICE用戶在“組件服務”(dcomcnfg)中添加了權限,該權限首先允許創建Word對象,但是我完全不願意使用該對象。
為了以防萬一,我還嘗試用以下行禁止顯示Word對話框
word.DisplayAlerts = Microsoft.Office.Interop.Word.WdAlertLevel.wdAlertsNone
沒有錯誤(顯然不是空對象引用)沒有解決問題-也許有一種方法可以向Word查詢特定的錯誤消息?
在打開任何文檔時,Word都需要normal.dot模板文件,發生此問題是因為IIS用戶沒有地方可以創建normal.dot,因此它在后台失敗。
通過為新創建的單詞實例設置UserTemplate路徑 (在創建它之后立即)來解決此問題。
該路徑必須可由IIS用戶(在我的情況下為“網絡服務”)可寫。
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)
我不確定您如何捕捉錯誤。
如果您從中找到一些線索,請查看以下頁面。
我遇到了同樣的問題,wheelibin建議的設置不足以使用NETWORK SERVICE帳戶創建文檔。
我最終要做的是:
創建一個用戶帳戶,以運行該進程。
以用戶身份登錄並運行Word(這將在Word中執行各種安裝任務,因此應用程序在作為服務運行時不會嘗試建立模式對話框)。
創建一個新的應用程序池,並將該池設置為以用戶帳戶身份運行。
如果您使用的是Windows身份驗證,並且您的服務器是Windows 2003(或者大概是2000),則將出現此問題 ,並且您需要更改服務器的SPN,這將破壞在不同環境下運行的任何應用程序的Windows身份驗證。用戶帳戶,或者您必須將身份驗證提供程序切換到NTLM而不是Kerberos。
IIS 7可以使用內核模式身份驗證來避免此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.