System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

This is an exception

System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) 

received in my windows service when I run it on any computer, but when I test it in a test application no exception is thrown. In my code, what I am doing is converting two .DAT files to .xls files. When I start the service through services.msc and start the service, it has been working fine for some time, but after updating some lines it throws an exception, and then nothing happens after that. I have two separate functions that do the job separately. Example code:

  public void SaveData_component(string filename) { try { string filepath = System.Configuration.ConfigurationSettings.AppSettings["filepath"].ToString() + filename; filepath_first = filepath; object missing = Missing.Value; //string getExtension = Path.GetExtension(filepath); string getFilename = Path.GetFileNameWithoutExtension(filepath) + "New"; string filepathNew = System.Configuration.ConfigurationSettings.AppSettings["filepath"].ToString() + getFilename + ".xls"; try { xlAppNew1 = new Application(); xlAppNew1.DisplayAlerts = true; workbooks1 = xlAppNew1.Workbooks; workbook1 = workbooks1.Open(@filepath, 0, true, 1, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // xlWorkSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook1.Worksheets.get_Item(1); xlAppNew1.ActiveWorkbook.SaveAs(@filepathNew, -4143, "", "", false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); string getExtension = ".xls";//Path.GetExtension(filepathnew); //string getFilename = Path.GetFileNameWithoutExtension(filepathnew); string connString = ""; if (getExtension.ToLower() == ".xls") connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepathNew + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\""; else connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepathNew + ";Extended Properties=Excel 12.0 Xml;HDR=Yes;IMEX=1;"; OleDbConnection con = new OleDbConnection(connString); con.Open(); System.Data.DataTable dtSheet = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string tname = dtSheet.Rows[0]["TABLE_NAME"].ToString(); OleDbDataAdapter ad = new OleDbDataAdapter(@"Select * FROM [" + tname + "];", con); DataSet dset = new DataSet(); ad.Fill(dset, "ProductOrderBOM"); System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataTable dttocopy = new System.Data.DataTable(); dt = dset.Tables["ProductOrderBOM"]; if (dt != null || dt.Rows.Count > 0) { dttocopy.Columns.Add("Column1", typeof(string)); dttocopy.Columns.Add("Column2", typeof(string)); dttocopy.Columns.Add("Column3", typeof(string)); dttocopy.Columns.Add("Column4", typeof(string)); dttocopy.Columns.Add("Column5", typeof(string)); dttocopy.Columns.Add("Column6", typeof(string)); dttocopy.Columns.Add("Column7", typeof(string)); dttocopy.Columns.Add("Column8", typeof(string)); dttocopy.Columns.Add("Column9", typeof(string)); for (int iRow = 0; iRow < dt.Rows.Count; iRow++) { dttocopy.Rows.Add(dt.Rows[iRow][0].ToString().Substring(3, 9), dt.Rows[iRow][0].ToString().Substring(12, 4), dt.Rows[iRow][0].ToString().Substring(16, 18), dt.Rows[iRow][0].ToString().Substring(34, 8), dt.Rows[iRow][0].ToString().Substring(42, 4), dt.Rows[iRow][0].ToString().Substring(46, 18), dt.Rows[iRow][0].ToString().Substring(64, 40), dt.Rows[iRow][0].ToString().Substring(104, 3), dt.Rows[iRow][0].ToString().Substring(107, 5)); } foreach (DataRow item in dttocopy.Rows) { if (item.ItemArray[0].ToString() != "" && item.ItemArray[5].ToString() != "" && item.ItemArray[8].ToString() != "") { string prdorderno = item.ItemArray[0].ToString().Trim(); string materialcode = item.ItemArray[5].ToString().Trim(); double qty = Convert.ToDouble(item.ItemArray[8].ToString().Trim()); d1 = callprocedure(prdorderno, materialcode, Math.Round(qty, 2)); if (d1 != null) { if (d1.Tables[0].Rows[0]["Column1"] != null) { WriteStuff(d1.Tables[0].Rows[0]["Column1"].ToString()); } } } } } d1.Clear(); d1.Dispose(); dset.Clear(); dset.Dispose(); dtSheet.Clear(); dtSheet.Dispose(); dt.Clear(); dt.Dispose(); dttocopy.Clear(); dttocopy.Dispose(); ad.Dispose(); con.Close(); con.Dispose(); } catch (Exception Ex) { WriteStuff(Convert.ToString(Ex) + "save_datacomponent function before finally"); } finally { GC.Collect(); GC.WaitForPendingFinalizers(); if (workbooks1 != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks1); if (workbook1 != null) { workbook1.Close(Type.Missing, Type.Missing, Type.Missing); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook1); } if (xlAppNew1 != null) { xlAppNew1.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlAppNew1); } } 

This is the function in which work is performed. Any help would be very noticeable. My Writestuff () method catches the following exception:

  System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) at Microsoft.Office.Interop.Excel.WorkbookClass.Close(Object SaveChanges, Object Filename, Object RouteWorkbook)at MyNewService.MyNewService.SaveData_component(String filename)savedata_component functionSystem.IO.FileNotFoundException: Could not find file 'C:\SUMIT\COMPONENT_TAI_PT1_RMKH_3799_20130603_030504New_03-06-2013-18-07-09-537_04-06-2013-16-42-20-194.DAT'. 

Also, if I get rid of clear methods in my code and

  System.Runtime.InteropServices.Marshal.FinalReleaseComObject(); 

Another exception occurs in my way:

  System.Runtime.InteropServices.InvalidComObjectException: COM object that has been separated from its underlying RCW cannot be used.at Microsoft.Office.Interop.Excel.WorkbookClass.Close(Object SaveChanges, Object Filename, Object RouteWorkbook)at MyNewService.MyNewService.SaveData_component(String filename) 

I'm really not sure what the hell hapenning.

+7
source share
2 answers

Try the second setup method described in this article.

http://msdn.microsoft.com/en-us/library/aa389286.aspx

+1
source

http://support.microsoft.com/kb/257757

The article says that Office 2003 support has been completed, the content is still valid today: Microsoft does not support Office automation on the server side. Even in client automation, Office interop is pretty dodgy.

It is best to use a library such as Aspose or NPOI.

0
source

All Articles