簡體   English   中英

Documents.Add在ASP.NET(VB.NET)上失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM