[英]System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
[英]How to handle System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
我正在開發一個 Windows 應用程序,我在其中操作 Word 應用程序。 更具體地說,我正在打開一個 Word 文檔,但是當我退出它並嘗試打開另一個 Word 文檔時,會出現此錯誤。
怎么處理
System.Runtime.InteropServices.COMException (0x800706BA):RPC 服務器不可用。 (來自 HRESULT 的異常:0x800706BA)在 Microsoft.Office、Word.ApplicationClass.set_Visible(Boolean Prop)**
如果我不退出 Word 應用程序,則不會出現此錯誤。
下面我將向您展示我打開和退出 Word 應用程序的功能。
//function to open word Document located in a specific path
public static void openWordDocument(string fileName)
{
try
{
wordApplication.Visible = true;
string filePath = myPath + fileName;
WordApi.Document docx = wordApplication.Documents.Open(filePath);
}
catch (Exception ex)
{
MyLogger.Error(ex.ToString());
}
}
//function to quit wordApplication
public static void CloseWordApp() {
try {
Object wordAppObject = Marshal.GetActiveObject("Word.Application");
WordApi.Application wordApp = (WordApi.Application)wordAppObject; //cast Object to its actual type
wordApp.Quit();
}
catch (Exception ex) {
MyLogger.Error(ex.ToString());
}
我終於弄清楚是什么問題。 主要問題是當我退出並嘗試打開另一個Word文檔時,打開另一個Word文檔意味着獲取/創建Word應用程序的對象。 在我的情況下, wordApp != null
最終確定了應用程序后,因此我不得不創建另一個Word應用程序對象並針對情況返回它。
//open word Document located in a specific path
public static void openWordDocument(string fileName)
{
try
{
wordApplication = createWordApplicationObject(wordApplication);
wordApplication.Visible = true;
string filePath = myPath + fileName;
WordApi.Document docx = wordApplication.Documents.Open(filePath);
}
catch (Exception ex)
{
MyLogger.Error(ex.ToString());
}
}
private static WordApi.Application createWordApplicationObject(WordApi.Application wordApp)
{
WordApi.Application wordAppFirstTime;
WordApi.Application wordApp1;
if (wordApp == null)
{
wordAppFirstTime = new WordApi.Application();
return wordAppFirstTime;
}
else
{
wordApp1 = new WordApi.Application();
return wordApp1;
}
}
與CloseWordApp()保持不變。
以下代碼行很可能觸發了異常:
wordApplication.Visible = true;
您需要確保COM服務器處於活動狀態。 因為退出后該對象變得不可用。 我建議將此類對象引用設置為null,以便稍后我們可以檢查應用程序對象是否仍然存在。 例如:
try
{
if (wordApplication == null)
{
wordApplication = new Word.Application();
}
wordApplication.Visible = true;
string filePath = myPath + fileName;
WordApi.Document docx = wordApplication.Documents.Open(filePath);
}
catch (Exception ex)
{
MyLogger.Error(ex.ToString());
}
我想添加一個適合我的解決方案。 我們在 .net web 服務中遇到了這個問題,以及其他錯誤,例如 Word.Documents.Open() 上的“遠程過程調用失敗”。 我將列出我們嘗試過的所有事情,並以解決方案結束。 我們嘗試了:
最終解決方案:我們刪除了運行 web 應用程序的用戶配置文件。
4天就知道了。 我以為我會與世界分享我的痛苦。 哈哈
在發布這些行時,我們不確定為什么本地配置文件會創建此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.