2016-01-08 5 views
0

Я развернул веб-приложение (разработанное в VS 2008) на 32-разрядной ОС Windows 2003 Server. Мое приложение использует Microsoft Office Word (я использую его для создания PDF). Приложение работает отлично, .Doc & .Pdf. Но как только я перезапущу сервер, я получаю вышеупомянутую ошибку (8007007E) только в первый раз, после обновления страницы приложение снова начнет работать правильно. Я искал различные причины ошибки, но ни один из них не совпал с моим. обычно это происходит при возникновении этой ошибки, что приводит к полной потере использования COM. Образец кода ниже.Странная ошибка. 8007007E: Получение фабрики COM-класса для компонента {} - 8007007E

string htmlContent = div_Data.InnerHtml; 
string filename = strLoanNo + strTime + ".doc"; 
if (!Directory.Exists(Server.MapPath("~/Doc/"))) 
{ 
Directory.CreateDirectory(Server.MapPath("~/Doc/")); 
} 
System.IO.StringWriter tw = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw); 
div_Data.RenderControl(hw); 
FileStream fs = new FileStream(Server.MapPath("~/Doc/") + filename,FileMode.OpenOrCreate, FileAccess.Write); 
StreamWriter sw = new StreamWriter(fs); 
sw.Write(tw.ToString()); 
sw.Flush(); 
sw.Close(); 
fs.Close(); 

object fileName = Server.MapPath("~/Doc/") + filename; 
object missing = System.Reflection.Missing.Value; 
object readOnly = false; 
object isVisible = true; 
object SaveChanges = true; 
Microsoft.Office.Interop.Word.ApplicationClass appWord = new Microsoft.Office.Interop.Word.ApplicationClass(); 
Microsoft.Office.Interop.Word.Document oWordDoc = appWord.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing, ref missing); 
oWordDoc.ExportAsFixedFormat(Server.MapPath("~/Doc/") + strLoanNo + "_" + strTime + ".pdf", WdExportFormat.wdExportFormatPDF, false, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 1, 1, WdExportItem.wdExportDocumentWithMarkup, true, false, WdExportCreateBookmarks.wdExportCreateNoBookmarks, false, true, true, ref missing); 
((_Document)oWordDoc).Close(ref SaveChanges, ref missing, ref missing); 
appWord.Quit(ref SaveChanges, ref missing, ref missing); 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(appWord); 

Response.Clear(); 
Response.Charset = ""; 
Response.ClearHeaders(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment;filename=" + strLoanNo + "_" + strTime + ".pdf"); 
     Response.WriteFile(Server.MapPath("~/Doc/") + strLoanNo + "_" + strTime + ".pdf"); 
Response.Flush(); 
Response.Close(); 

if (File.Exists(Server.MapPath("~/Doc/") + strLoanNo + strTime + ".doc")) 
{ 
    File.Delete(Server.MapPath("~/Doc/") + strLoanNo + strTime + ".doc"); 
} 
if (File.Exists(Server.MapPath("~/Doc/") + strLoanNo + strTime + ".pdf")) 
{ 
    File.Delete(Server.MapPath("~/Doc/") + strLoanNo + strTime + ".pdf"); 
} 

ответ

1

Не уверен, что если вопросы код на данный момент, так как проблема, вероятно, с DLL где-то, однако только системный администратор сможет сказать вам, какой из них изо всех сил. Если вы можете, используйте монитор процесса, чтобы изолировать какой компонент сбой https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx.

Спасибо, Apex

+0

, если это был вопрос DLL будет не давать ошибки снова и снова? –

+0

Я мог ошибаться, но я уверен, что COM DLLS загружаются по требованию всякий раз, когда создается соответствующий COM-объект (очевидно, это не означает, что у вас есть проблема с COM-библиотекой, это может быть любая DLL). Так звучит, что есть задержка между начальной загрузкой и загрузкой DLL, просто теория, я все еще думаю, что вы должны изолировать. Надеюсь, поможет. – apexlol

+0

Я думаю, что теория загрузки по требованию DLL кажется довольно точной, так как независимо от того, насколько я жду после перезапуска, первый экземпляр всегда выдает ошибку. чтобы преобразовать Doc в Pdf, я установил несколько дополнений к плагинам Microsoft ... может быть, они не начинаются вместе со службами COM –