title: System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
body: <p>This exception</p>
  
  <pre><code>System.Runtime.InteropServices.COMException (0x800706BA): 
  The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
  </code></pre>
  
  <p>is received in my Windows Service when I run it on any machine, 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 into .xls files. When I start the service through services.msc and run the service it runs fine for some time, but after updating certain rows it throws the exception and then  nothing happens after that. I have got  two separate functions that  does the work separately. The sample code is:</p>
  
  <pre><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 &gt; 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 &lt; 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() != "" &amp;&amp; item.ItemArray[5].ToString() != "" &amp;&amp; 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);
                  }
  
  
              }
  </code></pre>
  
  <p>This  is the function where the work is done.Any help would be greatly appreciable.
  My Writestuff() Method is catching the following Exception:</p>
  
  <pre><code>    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'.
  </code></pre>
  
  <p>Also if I get rid of the clear methods in my code and the </p>
  
  <pre><code>    System.Runtime.InteropServices.Marshal.FinalReleaseComObject();
  </code></pre>
  
  <p>Another exception comes in my way: </p>
  
  <pre><code>    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)
  </code></pre>
  
  <p>I am really not sure what  the hell is hapenning.</p>