Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Новый топик    Ответить
 Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
AndrK
Member

Откуда: Златоуст
Сообщений: 419
Не знаю, в этот ли топик, или в WinForms правильнее писать, напишу в обоих

Ситуация такая.
Из своей программы обращаюсь к 1С через COM-соединение (Interop.V83.dll )
Всё отработал, закрываю программу.
При закрытии ошибка
В просмотре событий вижу вот это

Имя сбойного приложения: Sync1C_KA.exe, версия: 1.0.0.0, отметка времени: 0x5c61aa11
Имя сбойного модуля: rtrsrvc.dll, версия: 8.3.13.1644, отметка времени 0x5bf207da
Код исключения: 0xc0000005
Смещение ошибки: 0x0002a322
Идентификатор сбойного процесса: 0x244c
Время запуска сбойного приложения: 0x01d4c22b43bf0865
Путь сбойного приложения: D:\C#\Tests\Test1C\SyncKA\bin\Release\Sync1C_KA.exe
Путь сбойного модуля: C:\Program Files\1cv8\8.3.13.1644\bin\rtrsrvc.dll
Код отчета: c2023675-2e1e-11e9-b330-2c41389d8fca
или это:

Имя сбойного приложения: Sync1C_KA.exe, версия: 1.0.0.0, отметка времени: 0x5c61aa11
Имя сбойного модуля: KERNELBASE.dll, версия: 6.1.7601.24335, отметка времени 0x5c267ec8
Код исключения: 0xc0000005
Смещение ошибки: 0x0000845d
Идентификатор сбойного процесса: 0x28a8
Время запуска сбойного приложения: 0x01d4c22df1443643
Путь сбойного приложения: D:\C#\Tests\Test1C\SyncKA\bin\Release\Sync1C_KA.exe
Путь сбойного модуля: C:\Windows\system32\KERNELBASE.dll
Код отчета: 37800b5a-2e21-11e9-b330-2c41389d8fca
При попытке отладки сбойного приложения, на обе эти библиотеки ругается.
На сервере 1C в списке соединений остаётся открытым соединение из программы.
Притом, когда я отлажтваюсь из Visual Studio - закрытие отрабатывает корректно.
Пробовал мониторить через ProcMon - ничего такого не нашёл

При попытке отладить процесс
Необработанное исключение по адресу 0x2700A322 (rtrsrvc.dll) в Sync1C_KA.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

От имени администратора - запускал (хотя UAC - отключен) - не помогает

Куда посмотреть ещё?
11 фев 19, 20:51    [21806851]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
Программист 1с
Member

Откуда: Москва
Сообщений: 9119
А если просто соединение и ничего не делаете в 1с, сразу закрываете тоже ошибка? (Если нет - то после какого действия в 1с идет ошибка?)
12 фев 19, 10:25    [21807106]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
AndrK
Member

Откуда: Златоуст
Сообщений: 419
Программист 1с,
+

namespace TestConnect
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string server = "sql01";
                string database = "DocCorp";
                string user = "Администратор";
                string password = "password";
                StringBuilder sb = new StringBuilder(100);
                sb.Append(@"Srvr=""" + server + @""";");
                sb.Append(@"Ref=""" + database + @""";");
                sb.Append(@"Usr=""" + user + @""";");
                sb.Append(@"pwd=""" + password + @""";");
                string connStr = sb.ToString();

                V83.COMConnector connector = null;
                object connection = null;

                Console.WriteLine("Create connector");

                connector = new V83.COMConnector();

                Console.WriteLine("Connector created, connecting");

                connection = connector.Connect(connStr);

                Console.WriteLine("Connected");

                Console.WriteLine("Releasing connection");
                if (connection != null)
                {
                    Marshal.Release(Marshal.GetIDispatchForObject(connection));
                    Console.WriteLine("Released, set Null");
                    connection = null;
                    Console.WriteLine("Connection released");
                }

                Console.WriteLine("Releasing connector");
                if (connector != null)
                {
                    Marshal.Release(Marshal.GetIDispatchForObject(connector));
                    Console.WriteLine("Released, set Null");
                    connector = null;
                    Console.WriteLine("Connector released");
                }

                Console.ReadKey();
                
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                Console.ReadKey();
            }
        }
    }
}


доходит до Console.ReadKey();
и после нажатия вылетает
12 фев 19, 11:00    [21807151]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
МодальноеОкно
Member

Откуда:
Сообщений: 2144
в закрытие коннектора и соединения попадает?
12 фев 19, 11:29    [21807183]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
МодальноеОкно
Member

Откуда:
Сообщений: 2144
база 1с кстати нормальная? "тестирование и исправление проходит"?
12 фев 19, 12:01    [21807213]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
AndrK
Member

Откуда: Златоуст
Сообщений: 419
МодальноеОкно,

База нормальная, 1С с ней работает без вопросов,
на другую базу такой же эффект.

Попробовал поиграться с небольшой базой в файловом и серверном режиме.
В файловом - всё проходит, в серверном - при завершении - ошибка.
12 фев 19, 13:55    [21807371]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
AndrK
Member

Откуда: Златоуст
Сообщений: 419
МодальноеОкно
в закрытие коннектора и соединения попадает?

Не пропадают.

Если-бы при закрытии просто ошибка вылетала, то пережил-бы,
всё-равно временный "костыль" для задачи это пишу. Небольшую интеграцию
между разными системами пытаюсь сделать :-)
12 фев 19, 14:00    [21807381]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
МодальноеОкно
Member

Откуда:
Сообщений: 2144
Marshal.Release(Marshal.GetIDispatchForObject(connection));

а если поменять на

Marshal.ReleaseComObject(

?
12 фев 19, 16:35    [21807630]     Ответить | Цитировать Сообщить модератору
 Re: Работа с 1С из сторонней программы через COM соединение. Ошибка при закрытии.  [new]
AndrK
Member

Откуда: Златоуст
Сообщений: 419
МодальноеОкно
Marshal.Release(Marshal.GetIDispatchForObject(connection));

а если поменять на

Marshal.ReleaseComObject(

?


Спасибо, оно самое. Помогло!
Осталось вспомнить, зачем я пытался таким "извращённым" способом
делать Release :-)
12 фев 19, 17:06    [21807661]     Ответить | Цитировать Сообщить модератору
Все форумы / Ответить