В C# работаю с 1С через com не могу понять как оборвать соединение... #742251


#0 by fierylions
После выполнения службы windows написанной на C# в 1С остается com соединение. Как можно отсоединится от базы? Пример: try             {                 Random rd = new Random;                 V82.COMConnector com1s = new V82.COMConnector; Так вот обнуление и уничтожение переменных не помогает com соединение в 1С все ровно висит.... Пробывал и result.Exit (Quit,Close,0,null) нечего не помогает.А у самого объекта com com1s пишет вообще таких методов нет... Может у кого то есть пример ?
#1 by Serginio1
FinalReleaseComObject А еще
#2 by fierylions
Спасибо попробую.
#3 by fierylions
к сожалению соединение остается... единственное что изменилось если второй раз приконектится тогда исчезает старое соединение и появляется новое. А без этих строк всегда соединения добавлялись +1. Может есть еще идеи?
#4 by yukon
Поробуй: System.Runtime.InteropServices.Marshal.FinalReleaseComObject(com1s); повтори для всех COM-Объектов.
#5 by lucifer
#6 by Serginio1
1С может кэшировать соединения MaxConnections (MaxConnections) Использование: Только чтение. Описание: Тип: Число. Определяет максимальное число одновременно существующих объектов Внешнее соединение, созданных через данный менеджер COM-соединений. Число одновременно существующих соединений включает также число соединений, находящихся в пуле внешних соединений. Значением по умолчанию 0 (число одновременно существующих объектов Внешнее соединение не ограничено). Устанавливать свойству не нулевое значение можно только в том случае, если сам объект был создан в Multithreaded Apartment (MTA), что обеспечивает реальное функционирование самого менеджера и созданных им объектов Внешнее соединение в многопотоковой (multithreaded) среде. Это условие соблюдается в частности, если COM-соединитель был создан в приложении ASP.NET. Если же объект был создан в Singlethreaded Apartment (STA), то реально все действия с ним и созданными им объектами Внешнее соединение будут выполняться в одном потоке. В этом случае, если метод Connect не сможет на первом проходе найти подходящее или создать новое Внешнее соединение, то выполнение этого метода зациклится, так как освободить уже, возможно, ненужное другое Внешнее соединение будет нельзя по той причине, что операция освобождения объекта Внешнее соединение должна быть выполнена в том же потоке, в котором уже выполняется метод Connect. Следует помнить, что создание COM-объектов из приложения 1C:Предприятие 8 выполняется из STA. Это же справедливо для большинства GUI-приложений Windows.
#7 by lucifer
"Пробывал и result.Exit (Quit,Close,0,null) нечего не помогает" вообщето-то в c# все что связано с внешнеми ресурсами должно быть реализовано через интерфейс IDisposable, посмотри COMConnector поддерживает этот интерфейс, если да то используй using {} а на result.Exit и result = null;
#8 by Serginio1
Убери
#9 by fierylions
Не один из вариантов не помог что то делаю не так.... база файловая может это как то повлиять?
#10 by Serginio1
А как ты видишь через список активных пользователей?
#11 by fierylions
да вот скрин [url=]
#12 by fierylions
да вот скрин
#13 by Serginio1
Вот ту народ пишет Dim Сотрудники As Object .... Сотрудники = Trade.CreateObject("Справочник.Сотрудники") 'После объявлении любого объекта 1С надо  вставить: Marshal.Release(Marshal.GetIDispatchForObject(Сотрудники)) .... 'в конце кода добавляем: Marshal.ReleaseComObject(Сотрудники) Сотрудники = Nothing GC.Collect GC.WaitForPendingFinalizers
#14 by fierylions
Спасибо большое строка помогла оборвать соединение:
#15 by Serginio1
Ачто FinalReleaseComObject не помогал?
#16 by fierylions
нет соединение оставалось.
#17 by Serginio1
Спасибо буду знать
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С