System.Runtime.InteropServices.COMException (0x800706BA): сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 System.Runtime.InteropServices.COMException (0x800706BA): сервер RPC недоступен. (Исключение из HRESULT: 0x800706BA)

Сообщение Anonymous »

Это исключение

Код: Выделить всё

System.Runtime.InteropServices.COMException (0x800706BA):
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
получается в моей службе Windows, когда я запускаю его на любом компьютере, но когда я тестирую его в тестовом приложении, никаких исключений не создается. В моем коде я конвертирую два файла .DAT в файлы .xls. Когда я запускаю службу через Services.msc и запускаю ее, она какое-то время работает нормально, но после обновления определенных строк выдает исключение, и после этого ничего не происходит. У меня есть две отдельные функции, которые работают отдельно. Пример кода:

Код: Выделить всё

     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);
}

}
Это функция, в которой выполняется работа. Любая помощь будет весьма признательна.
Мой метод Writestuff() перехватывает следующее исключение:

Код: Выделить всё

    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'.
А также, если я избавлюсь от ясных методов в своем коде и

Код: Выделить всё

    System.Runtime.InteropServices.Marshal.FinalReleaseComObject();
На моем пути возникает еще одно исключение:

Код: Выделить всё

    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)
Я действительно не понимаю, что, черт возьми, происходит.

Подробнее здесь: https://stackoverflow.com/questions/169 ... er-is-unav
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • System.Runtime.InterOpservices.comexception (0x800706ba): сервер RPC недоступен. (Исключение от HResult: 0x800706ba)
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • System.Runtime.InteropServices.COMException: «Исключение из HRESULT: 0x800A03EC»
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Исключение из HRESULT: 0x8002000B (displi_badindex) для System.Runtime.InterOpServices.comexception
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • System.Runtime.InteropServices.COMException "
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Открытие Excel Error: System.Runtime.InterOpservices.COMEXCEPTION (0x80080005): Получение фабрики класса COM для компоне
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»