При работе через COM периодически возникает ошибка AccessViolationException #726150


#0 by zeroart
Всем привет! Есть windows-служба, которая работает с 1С через com-соединение. Служба написана на C# и собственно вся логика службы в том, чтобы получать данные из пары справочников и записать эти данные в целевую БД. Как часто бывает, все замечательно работает на локальной машине, но не работает должным образом на сервере. А вернее служба может отработать или некоторое время работать,  а потом может просто упасть в момент работы с 1С и в лог пишется такая ошибка: "AccessViolationException: Attempted to read or write protected memory". Думали, что проблема в службе, но если тестировать службу на сервере с mock-источником, то все работает хорошо. Поэтому есть подозрение, что падение службы связано именно с com-компонентом 1С. А вот в чем причина падения совершенно непонятно и непонятно как и что проверить. Версия Windows-сервера: Windows 2008 R2 x64 Версия платформы: 8.3.4.496 Кто-нибудь сталкивался с подобным? Какие могут быть причины?
#1 by zeroart
Коллеги?!!!
#2 by Serginio1
Попробуй использовать пул соединенй. То есть держи соединение, а вот каждый раз подключайся через Connect
#3 by Serginio1
Не забываем про ReleaseComObject и  FinalReleaseComObject
#4 by zeroart
А почему решили что в этом дело?
#5 by Serginio1
AccessViolationException бывает когда ссылка на ком объект есть, но он по каким то причинам отвалился. Могут быть проблемы с потоками при работе с ком объектами в Net
#6 by Serginio1
Проще всего сделать на 1С веб сервис и его дергать. Заодно все типизированно и таких проблем не будет
#7 by zeroart
Да я бы рад через веб-сервис, но это к сожалению не от меня зависит. А что ты имеешь ввиду объект есть, но отвалился?
#8 by zeroart
То есть нужно пересоздать ComConnector?
#9 by Serginio1
Нет Держи СOM1с, а вот при подключении используй Connect Соединение=СOM_ГМС.Connect и применяй к нему FinalReleaseComObject(Соединение) при завершении.
#10 by Serginio1
Connect(<СтрокаСоединения>) Параметры: Тип: Строка. Строка параметров (Строка соединения), используемая 1С:Предприятием для соединения с информационной базой. Возвращаемое значение: Тип: Внешнее соединение. Описание: Создает соединение с информационной базой 1С:Предприятия 8. Устанавливает соединение с информационной базой 1С:Предприятия 8 и возвращает ссылку на объект Внешнее соединение. Установка соединения выполняется по следующему алгоритму: 1. Внешнее соединение с требуемыми параметрами ищется в пуле соединений. Если найдено, то используется оно. 2. Если Внешнее соединение с требуемыми параметрами не найдено, то анализируется не исчерпан ли лимит по числу одновременно существующих соединений. Если не исчерпан, то создается новое Внешнее соединение. 3. Если лимит исчерпан, но при этом в пуле имеются неиспользуемые Внешнее соединение, то соединение, дольше всех находящееся в пуле, удаляется и создается новое Внешнее соединение. 4. Если никаким способом найти подходящее или создать новое Внешнее соединение не удалось, то происходит ожидание освобождения Внешнее соединение другим потоком, после чего весь процесс повторяется, начиная с пункта 1. Доступность: Интеграция. Пример:
#11 by Serginio1
#12 by zeroart
Проблема отчасти решается сборкой под x86, частота возникновения ошибок становится меньше, но при этом ошибка все равно может возникнуть.
#13 by Serginio1
Кстати лучше использовать внешние обработки. Там и правильный подсчет ссылок и главное, что проще отлаживать из под 1С
#14 by zeroart
Лучше вообще построить через веб-сервисы, но вот не все от тебя зависит.
#15 by Serginio1
Почему? Там проблем то значительно меньше чем тебе писать.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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