SQL.RU
 client/server technologies
 
 Главная | Документация | Статьи | Книги | Форум | Опросы | Рассылка | Работа | Поиск | FAQ |

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

Откуда: GotDotNet.Ru
Сообщений: N/A
Здравствуйте, очень надеюсь на помощь в решениии моего вопроса.
   Реализован сайт отображающий данные из 1С 8.1 через web-службу, служба берет данные из 1С с помощью com-соединений.
   Все работает вроде нормально, но очень долго и накак побороть данный минус не получается. Реализовал конечно такой механизм, но он мне не очень нравится:
Пользователь при входе на сайт отправляет запрос в службу где создается COM-соединение, которое заносится в Session(т.е. в сессию) службы и в дальнейшем пользователь использует данное соединение. Во избежании трат ресурсов и других косяков храню соединеие в сессии только 2мин., после чего в Global.asax через Release обрываю соединение, т. е. если пользователь не был активен в течение 2мин, то соединение в сессии обрывается.
   Понимаю что данный механизм не очень рациональный, но не на чего другое мозгов пока не хватает.
   Слышал про ServicedComponent и ObjectPoolingAttribute, но что то не очень у меня с ними получилось может кто подскажет или расскажет.

Заранее благодарен за любую помощь.

Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 09:35    [6452975] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
Allaire
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Попробуйте создавать соединение в Session_start, а закрывать в Session_end
My native language? Is C# !!!


Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 10:18    [6453254] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
skylinet
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
   Ну я так и делаю, проблем с созданием и унижтожением com-соединения в сессии web- службы нет, просто я догадываюсь что хранить открытые соединения в сессии хоть и на 2 минуты не очень рационально.
   И поэтому хотел услышать все + и - так сказать. И очень хочу получить советы опытных и бывалых, как они решали подобную проблему.
   Ведь кто-то же наверное сталкивался с подобной проблемой. Кто-то реализовывал пул соединений. Очень хотелось бы узнать просто очень много времени на это убил.
   Пожалуйста, помогите. Заранее спасибо.


Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 11:06    [6453587] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
Allaire
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Хм... вообще механизмов подключиться к 1С несколько- COM, OLE к примеру. Вы используете comcntr.dll ? Там есть два COM объекта
v81.Application и V81.COMConnectorClass... и соединение в таком случае происходит через т.н. "позднее связывание":object v8 = Activator.CreateInstance(Type.GetTypeFromProgID("V81.Application"));
object[] connectargs = new object[1];
connectargs[0] = @"File=D:\1CBases\DB1;Usr=Admin";
if ((bool)v8.GetType().InvokeMember("Connect", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.InvokeMethod, null, v8, connectargs))
{
v8 = null;
}

Если создаете пользователя для подключения - не забудьте раздать ему права на запуск 1С через OLE Automation...
My native language? Is C# !!!


Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 12:03    [6454114] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
skylinet
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Вообще для подключения к 1С использую следующий код:

object v81 = null;
            object connect = null;
            System.Type v81comConnector = null;
            v81comConnector = Type.GetTypeFromProgID("V81.ComConnector");
            v81 = Activator.CreateInstance(v81comConnector);
            Object[] arguments = { строка подключения };
            connect = GetComObject("Connect", v81, arguments);//соединение
            ReleaseObject(v81);

Т.е. не OLE, а COM данный вид подключения осуществлется быстрее чем V81.Application, но все равно занимает достаточное время и пользователь в 1С наделен нужными правами.
   И чтобы убыстрить работу сохраняю COM-соединение(т.е. значение переменной connect) в сессию(схему смотри в 1-м сообщении).
   Заведомо зная что данный механизм не рациональный (сохранение соединения в Session) хотел бы использовать другой-пул соединений, например.
   Сейчас пытаюсь использовать COM+ (ServicedComponent) там есть встроенное пулирование: написать класс под COM+ только для получения COM-соединения к 1С, но пока что то не очень получается. Может кто то сталкивался с подобным?
   Кто-нибудь же наверное реализовал свой пул или использовал сторонний?
   Помогите пожалуйста, застрял конкретно.

Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 15:44    [6456158] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
Dully
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
не пробовал использовать 1С-овские компоненты Веб решения?

Данное сообщение получено с GotDotNet.Ru (оригинал)
18 ноя 08, 17:27    [6457151] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
skylinet
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Если только для тестов. Я бы не против использовать стандартное web-расширение для 1С да начальство по какой то причине категорически против, так что приходится обходиться без него.

Данное сообщение получено с GotDotNet.Ru (оригинал)
19 ноя 08, 07:57    [6459066] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
skylinet
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Да и стандартные решения в виде ws-ссылки и web- службы тоже начальство не устраивает. Начальство сказало именно только через COM-соединения и без вариантов.

Данное сообщение получено с GotDotNet.Ru (оригинал)
19 ноя 08, 08:03    [6459067] Ответить | Цитировать    Сообщить модератору

 Долгое подключение к 1с 8.1   [new]
Allaire
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
skylinet: Начальство сказало именно только через COM-соединения и без вариантов.

Ну тогда понеслась - снова изобретать колесо! :)
My native language? Is C# !!!


Данное сообщение получено с GotDotNet.Ru (оригинал)
19 ноя 08, 13:32    [6461062] Ответить | Цитировать    Сообщить модератору

 Re: Долгое подключение к 1с 8.1   [new]
Vlad Frost
Member

Откуда:
Сообщений: 1
Тоже столкнулся с описанной топикстартером проблемой: сравнительно долгой установкой соединений при вызове из скрипта. Буквально сегодня обнаружил во встроенной в 1С:Предприятие справке замечательные свойства V81COMConnector, такие как MaxConnections, PoolTimeout и PoolCapacity. А ещё в той же справке пишут:

Синтакс-помощник
COM-соединитель (COM connector)
Connect (Connect)
Синтаксис:
Connect(<Строка соединения>)
...
Создает соединение с информационной базой 1С:Предприятия 8.1.
Устанавливает соединение с информационной базой 1С:Предприятия 8.1 и возвращает ссылку на объект COM-соединение.
Установка соединения выполняется по следующему алгоритму:
1. COM-соединение с требуемыми параметрами ищется в пуле соединений. Если найдено, то используется оно.
2. Если COM-соединение с требуемыми параметрами не найдено, то анализируется не исчерпан ли лимит по числу одновременно существующих соединений. Если не исчерпан, то создается новое COM-соединение.
3. Если лимит исчерпан, но при этом в пуле имеются неиспользуемые COM-соединение, то соединение, дольше всех находящееся в пуле, удаляется и создается новое COM-соединение.
4. Если никаким способом найти подходящее или создать новое COM-соединение не удалось, то происходит ожидание освобождения COM-соединение другим потоком, после чего весь процесс повторяется, начиная с пункта 1.


В каталог с моими скриптами положил файлик global.asa со следующим содержимым:
<object runat="server" scope="application" id="objV81COMConnector" progid="V81.COMConnector"></object>
<script language="vbscript" runat="server">
sub Application_OnStart
  objV81COMConnector.PoolCapacity = 2
  objV81COMConnector.PoolTimeout = 60
  objV81COMConnector.MaxConnections = 4
end sub
</script>
И теперь, во время соединения с сервером приложений 1С:Предприятие, производится поиск уже существующего, и новое устанавливается только если подходящее соединение не найдено.
Dim V81Connection           
Dim V81ConnectionString
Set V81COnnectionString = "Srvr=""appservername"";Ref=""dbname";Usr=""username"";Pwd=""userpassword"""
Set V81Connection = objV81COMConnector.Connect(V81ConnectionString)

http://blog.rk2.ru/24.12.2008/1
24 дек 08, 15:17    [6614359] Ответить | Цитировать    Сообщить модератору

 Re: Долгое подключение к 1с 8.1   [new]
skylinet
Member

Откуда: GotDotNet.Ru
Сообщений: N/A
Очень интересный полезное сообщение Vlad Frost , щас пойду проверю.

Данное сообщение получено с GotDotNet.Ru (оригинал)
25 дек 08, 12:28    [6618911] Ответить | Цитировать    Сообщить модератору

 Treyderchik   [new]
Treyderchik
Guest
Так то оно так, только порой напишут и одному вроде все кажется понятно, а для другого это темный лес. Вот RSS-подписка, все ясненько и понятно, что к чему, а я на днях попробовал знакомому объяснить что это, так полчаса времени убил. Поэтому краткость не всегда сестра таланта, читатели то ведь разные попадаются, некоторым нужно и поподробнее. Например мне :)
13 сен 09, 23:46    [7653242] Ответить | Цитировать    Сообщить модератору

Все форумы / ASP.NET Ответить
Rambler's Top100 Powered by ActualForum 1.5.2 Copyright (c) Alex Sibilev 2000-2010