Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Сервер приложений для v7 (число прочтений - 22272 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Сервер приложений для v7
15. Мая 2007 :: 16:03
Печать  
В продолжение темы, начатой тут.
kms писал(а) 15. Мая 2007 :: 07:19:
1. "Сервер" - просто внешний процесс. Он принимает соединения, создает несколько экземпляров 1С в качестве "working threads" и диспетчеризует запросы клиентов в вызовы необходимых процедур модулей ("адресатов") с переданными параметрами.
Может принимать набор даных от клиента и возвращать набор данных клиенту.

2. "Клиент" - для 1С можно сделать компоненту.
Ее функция - в установлении соединения с сервером, авторизации и поддержке протокола обмена.
В 1С нужны всего несколько методов, обеспечивающих посылку данных конкретному "адресату" и прием данных в синхронном и асинхронном режимах.

Авторизация, особенности протокола, обработка ошибок, методы упаковки данных - это детали.


Набросал вот простенький компонент v7AppServer.Connection.
Что нужно, чтобы это заработало:
  • распаковать куда-нибудь файл v7AppServer.dll из архива и выполнить regsvr32 v7AppServer.dll
  • создать COM+ приложение:
    • Панель управления -> Администраирование -> Службы компонентов
    • в дереве консоли найти узел "Приложения Com+" и в контекстном меню этого узла выбрать Создать -> Приложение
    • в мастере установки нажать кнопку "создать новое приложение" и ввести имя приложения "v7AppServer"
    • Способ активации выбрать "серверное приложение" и проклацать "далее" до завершения работы мастера
  • Создать компонент в приложении
    • в только что созданном приложении найти группу "Компоненты" и в контекстном меню выбрать "Создать -> Компонент"
    • в мастере установки компонентов нажать "Установка новых компонентов", указать путь к файлу v7AppServer.dll и нажать "Готово"
    • в свойствах компонента, на закладке "Активация" включить группировку объектов в пул и указать минимальный и максимальный размер пула (например 3 и 10)
    • включить флажок "Включить создание объектов" и в поле "строка конструктора" написать параметры командной строки для 1С (например: /dC:\BAZA\ /NБот /P123)
  • Запустить приложение (через контекстное меню v7AppServer)
    После этого в списке процессов должны появиться n процессов 1cv7.exe, где n-минимальный размер пула объектов
  

v7AppServer.rar ( 6 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #1 - 15. Мая 2007 :: 16:17
Печать  
Пользователь 1С, под которым запускаются "working threads" не должен иметь в настройках рабочий каталог (чтобы могло запуститься несколько экземпляров 1С от этого пользователя).
Клиентское приложение может создавать экземпляры класса v7AppServer.Connection и пользоваться его свойством AppDispatch.
Это свойство аналогично v77.Application при доступе к 1С по OLE.
Каждый клиент, который пытается создать объект v7AppServer.Connection, будет получать его из пула объектов (если есть свободные объекты в пуле) и по окончании работы с ним будет возвращать объект в пул.
Проверить, что AppServer работает, можно при помощи скрипта:
Код
Выбрать все
set v7=CreateObject("v7AppServer.Connection")
MsgBox v7.AppDispatch.EvalExpr("РабочаяДата()") 


Мне пока не удается создать экземпляр v7AppServer.Connection на удаленном компьютере. Но это скорее всего решается настройками DCOM.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #2 - 15. Мая 2007 :: 16:18
Печать  
Что скажет коллективный разум?
Имеет смысл развивать? и если да, то в каком направлении?
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vip
1c++ power user
Отсутствует



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #3 - 15. Мая 2007 :: 16:23
Печать  
steban писал(а) 15. Мая 2007 :: 16:18:
Что скажет коллективный разум?
Имеет смысл развивать? и если да, то в каком направлении?

Да, наверное, стоит.
Если объяснишь простыми словами и пример, для чего это нужно. Улыбка
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #4 - 15. Мая 2007 :: 17:20
Печать  
Ну, например, для создания веб-приложений, работающих с 1С.
Или для задач, которые описал Миша kms писал(а) 15. Мая 2007 :: 07:19:
Для чего это нужно:
1. Иногда нужно в оперативном режиме закинуть данные в некую базу, которая находится х.з.
Web расширение не катит (нужем привычный клиент), Terminal - тоже не подходит.
2. Иногда нужно опять же оперативно получать данные из множества мест и релировать их каким-то образом.
То же самое, ни web, ни ts, ни распределенка не подходят.

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #5 - 15. Мая 2007 :: 17:30
Печать  
Компонента просто запускает 1С с параметрами, переданными в строке конструктора, по OLE, удерживает ссылку на 1С и отдает эту ссылку через своё свойство AppDispatch.
Пулинг объектов обеспечивает COM+.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #6 - 15. Мая 2007 :: 18:43
Печать  
vip

Реально по механике очень похоже на v7web, только лучше.
В принципе, можно делать любой web интерфейс через тот же cgi+web сервер.
Можно писать скрипты, причем в отличие от непосредственного использования v77.Application, здесь есть пулинг воркеров и время жизни воркера не привязано к времени жизни объекта.

steban

Степ, это очень здорово.
Странно, что никто не сделал такое решение раньше.
Наверное, повода не было.

Мелкие вопросы я не буду сейчас писать.
Типа "надо бы отслеживать, не открыта ли база монопольно и если да, то что-то делать при старте компонента" и т.д.
Это все пока фигня.

Серьезный вопрос у меня только один.
Будет ли это работать в глобальных (неустойчивых, медленных, открытых) сетях?
Надо пробовать.

Еще будет вопрос прохождения трафика DCOM через маршрутизаторы.
Тут надо что-то придумывать.
Или как-то туннелировать DCOM - трафик (никогда этого не делал)
Или везде делать VPN (видимо, от этого все равно никуда не деться, шифровать трафик тоже надо).

Да, еще будет вопрос с авторизацией / разграничением доступа.
Не пускать же всех в домашнюю бухгалтерию Улыбка

Короче, есть о чем подумать.
Должно получиться, хотя изначально идею с DCOM я как-то не рассматривал.
Давайте пробовать.
Вернуться к классике в виде чистого TCP сервера мы всегда успеем, если что.


P.S.
Любовь это вам не просто так, ей занимацца нужно... (с) Кнышев
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #7 - 15. Мая 2007 :: 18:57
Печать  
Вах... Степан, побольше бы таких людей как ты! мне идея очень нравится, если можно будет сделать WEB доступ к базе, то... в общем давно мечтаю! Я за!


P.S. trdm, я ж говорил, что в курилке и рождаются мега проекты Улыбка
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #8 - 15. Мая 2007 :: 21:43
Печать  
steban писал(а) 15. Мая 2007 :: 16:18:
Что скажет коллективный разум?
Имеет смысл развивать? и если да, то в каком направлении?

Шутдаун нужен вроде. По расписанию и программно....
И вообще, Степ, ты бы полегче с иновациями ))) не дай бог в тираж пойдут, спины не рагогнешь...
Arta писал(а) 15. Мая 2007 :: 18:57:
P.S. trdm, я ж говорил, что в курилке и рождаются мега проекты Улыбка

провокатор...... а вообще я так думаю не все так просто тут...
  
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #9 - 15. Мая 2007 :: 22:22
Печать  
Степ,
Цитата:
V7 = СоздатьОбъект("v7AppServer.Connection");
{\\TSS\SHARE\BASES\BASE\DEVELOP\ТЕСТ.ERT(4)}: Неудачная попытка создания объекта (v7AppServer.Connection)


а в ивент логе вижу
Цитата:
The system has called a custom component and that component has failed and generated an exception. This indicates a problem with the custom component. Notify the developer of this component that a failure has occurred and provide them with the information below.
Component Prog ID:
Method Name: IObjectConstruct::Construct
Server Application ID: {2255F767-E87E-47B1-BB56-B195CB924443}
Server Application Instance ID:
{26AC525B-2BFB-4580-A0B4-DF20594FD85E}
Server Application Name: v7AppServer
The serious nature of this error has caused the process to terminate.
Exception: C0000005
Address: 0x100018BB
Call Stack:
V7APPSERVER!DllUnregisterServer + 0x429
COMSVCS!CoLoadServices + 0x2a33
ole32!CoInitializeSecurity + 0x3a2b
COMSVCS!DispManGetContext + 0x1da85
COMSVCS!DispManGetContext + 0x1e3ef
COMSVCS!DispManGetContext + 0x1e466
COMSVCS!DispManGetContext + 0x1e47c
COMSVCS!DispManGetContext + 0x1e50e
COMSVCS!DispManGetContext + 0x1e5fe
COMSVCS!CoCreateActivity + 0xae8
COMSVCS!CoCreateActivity + 0xac8
COMSVCS!RegisterComEvents + 0x50935
COMSVCS!RegisterComEvents + 0x50b0b
msvcrt!_endthreadex + 0xa3
kernel32!GetModuleHandleA + 0xdf


For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.



P.S. Процесы в системе появились, только один из них постоянно показывает 49-50% загрузки CPU.
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #10 - 15. Мая 2007 :: 22:27
Печать  
С третьей попытки заработало!
Хмм... прикольно  Подмигивание
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #11 - 15. Мая 2007 :: 22:58
Печать  
50% загрузки остается, но работает.
Проэкспериментировал на всем, где можно, работает

Пошел играться с php Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #12 - 16. Мая 2007 :: 06:03
Печать  
Хорошая штука, Степану огромное спасибо.
Нужно потестить.
И с удаленным доступом интересно проверить.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #13 - 16. Мая 2007 :: 07:26
Печать  
Есть ведь некоторый предел на количество одновременно запущенных одинэсов. Как собираешься это решать?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #14 - 16. Мая 2007 :: 07:43
Печать  
trdm писал(а) 15. Мая 2007 :: 21:43:
Шутдаун нужен вроде. По расписанию и программно....

Через WMI можно стартовать/останавливать COM+ приложения.
Кажется можно даже создавать приложения и управлять настройкой компонент.
И еще у COM+ приложений есть настройка "запустить как службу NT". Потом можно обращаться с приложением как с обычной службой.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #15 - 16. Мая 2007 :: 07:49
Печать  
Uzhast писал(а) 16. Мая 2007 :: 07:26:
Есть ведь некоторый предел на количество одновременно запущенных одинэсов. Как собираешься это решать?

Ты имеешь ввиду ограниченное количество GDI-объектов на систему?
Никак не собираюсь решать.
Можно опытным путем нащупать максимальное количество экземпляров 1С (допустим n) и установить максимальный размер пула скажем n-3.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #16 - 16. Мая 2007 :: 07:52
Печать  
steban писал(а) 16. Мая 2007 :: 07:49:
Ты имеешь ввиду ограниченное количество GDI-объектов на систему?
Никак не собираюсь решать.
Можно опытным путем нащупать максимальное количество экземпляров 1С (допустим n) и установить максимальный размер пула скажем n-3.

Подозреваю, ограничение будет сильно разным в зависимости от конфигурации Улыбка А разделить по, например, разным терминальным сессиям никак? Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #17 - 16. Мая 2007 :: 07:57
Печать  
Братцы, ограничение GDI и USER объектов нас не должно волновать.

Ограничение в 10000 на процесс в этом режиме никогда не будет достигнуто
(какой смысл открывать формы и выводить таблицы в серверном процессе?)  Язык

А общей лимит для всех процессов можно установить любым (сам тестировал для 40000).
Я на эту тему в тех форуме приводил рецепт.

Кстати, надо его вытащить сюда в какой-нибудь FAQ.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #18 - 16. Мая 2007 :: 07:59
Печать  
steban писал(а) 16. Мая 2007 :: 07:43:
Через WMI можно стартовать/останавливать COM+ приложения.

Можно еще так:
Код
Выбрать все
set ComPlus = createobject("COMAdmin.COMAdminCatalog")
set Pril=ComPlus.GetCollection("Applications")
Pril.Populate()
PrCount=pril.Count - 1
for each f1 in Pril
    if f1.Name="1CV8" then
	  ComPlus.ShutDownApplication(f1.Name)
    end if
next 


Код отсюда.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #19 - 16. Мая 2007 :: 08:01
Печать  
kms писал(а) 16. Мая 2007 :: 07:57:
Братцы, ограничение GDI и USER объектов нас не должно волновать.

Не факт, что это GDI и USER. Как-то давно сталкивался, что не мог открыть несколько Комплексных (просто запустить не мог). А с другими конфами все было нормально. Так что, ограничение может вызываться чем-то другим, связанным с тяжестью конфы. Правда, это было давно на старых релизах. Так что, надо это дело тщательно протестировать, ИМХО.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #20 - 16. Мая 2007 :: 08:09
Печать  
Uzhast писал(а) 16. Мая 2007 :: 07:52:
Подозреваю, ограничение будет сильно разным в зависимости от конфигурации Улыбка

Правильно, но ограничения на размер пула определяет не компонент, а тот, кто его устанавливает.

Uzhast писал(а) 16. Мая 2007 :: 07:52:
А разделить по, например, разным терминальным сессиям никак? Улыбка

В смысле?..... Службы терминалов тут не используются....

А вообще, на сайте MS пишут, что при помощи Microsoft Application Center можно организовать COM+ Application Cluster с балансировкой нагрузки
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #21 - 16. Мая 2007 :: 08:15
Печать  
steban писал(а) 16. Мая 2007 :: 08:09:
В смысле?..... Службы терминалов тут не используются....

А вообще, на сайте MS пишут, что при помощи Microsoft Application Center можно организовать COM+ Application Cluster с балансировкой нагрузки

Службы терминалов не используются, но если разные кучки одинэсов запускать в разных терминальных сессиях, то можно запустить сколько угодно одинэсов. Это я так, в качестве примерного обхода проблемы Улыбка

По поводу кластера. Допустим, есть некое ограничение на количество одинэсов. При максимальном количестве 1С сервер загружается на 10%. Для чего здесь кластер? Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #22 - 16. Мая 2007 :: 08:34
Печать  
Uzhast

Заинтриговал, кстати.

Проблемы GDI/USER известны, вопрос лимита количества открытых файлов на сервере - тоже.
Ну... еще проблема с контейнерами при объединении толстых конфигураций под NT...
А что было в твоем-то случае? Тема xxx не раскрыта Подмигивание


P.S.
У меня вчера тоже сервер Степана сразу не заработал.
Точнее, с сервером все ОК, а вот вызывать методы AppDispatch вообще не получалось.
Потом выяснил, что у v77.Application те же грабли, т.е. вообще что-то с работой 1С через OLE.

Уже думал, что глюк 27 релиза; закрыл все, запустил заново - заработало...
Что это было - не знаю, видимо как говорит fez, "shit happens".
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #23 - 16. Мая 2007 :: 08:42
Печать  
kms писал(а) 16. Мая 2007 :: 08:34:
Проблемы GDI/USER известны, вопрос лимита количества открытых файлов на сервере - тоже.
Ну... еще проблема с контейнерами при объединении толстых конфигураций под NT...
А что было в твоем-то случае? Тема xxx не раскрыта Подмигивание

ХЗ. Может, зря я панику поднимаю? Улыбка В общем, дело было лет 5 назад в NT4 Workstation. Базы запускались локально. Так что, количество файлов не при чем вроде... Может, на NT4 максимальное количество GDI-объектов меньше?... А у Комплексных вроде меню особо жирные Улыбка Может, они так влияли...
Но все равно, если дело в GDI, то берем 10 баз 1С и запускаем на каждую 10 экземпляров 1С. Каждый экземпляр пусть съедает 200 GDI-объектов. Получаем, что всего одинэс сожрет 20000 объектов. Максимальное количество превышено. А как его можно увеличить?
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #24 - 16. Мая 2007 :: 08:53
Печать  
Uzhast писал(а) 16. Мая 2007 :: 08:01:
Не факт, что это GDI и USER. Как-то давно сталкивался, что не мог открыть несколько Комплексных (просто запустить не мог).

Скорее всего именно в GDI и была проблема.
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #25 - 16. Мая 2007 :: 09:04
Печать  
Arta писал(а) 16. Мая 2007 :: 08:53:
Скорее всего именно в GDI и была проблема.

Может, и в GDI... Но как-то проскальзывала тема на Т1С, что человек не мог запустить 1С больше 8 раз. А такое количество 1С съедает совсем мало GDI-объектов. Так что, дело может быть и в чем-то другом...
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #26 - 16. Мая 2007 :: 10:37
Печать  
Провел эксперимент:
ОС-WinXP SP2
1С-77025.
На сервере приложений настроен запуск файловой ТиС.
Поставил минимальный размер пула - 30.
При старте запустилось 5 экземпляров 1С. 6-й никак не мог запуститься и пожирал 100% процессорного времени.
Закрыл другие приложения - запустилось 8 экземпляров. Каждый экземпляр 1cv7s.exe занимал ~400 объектов GDI.

Вывод:
а хрен его знает, какой из этого вывод. Может быть, действительно, затык не в ограничениях на GDI.
Завтра поэкспериментирую на серверной оси и SQL-ной 1С.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #27 - 16. Мая 2007 :: 11:28
Печать  
steban писал(а) 16. Мая 2007 :: 10:37:
Провел эксперимент:
ОС-WinXP SP2
1С-77025.
На сервере приложений настроен запуск файловой ТиС.
Поставил минимальный размер пула - 30.
При старте запустилось 5 экземпляров 1С. 6-й никак не мог запуститься и пожирал 100% процессорного времени.
Закрыл другие приложения - запустилось 8 экземпляров. Каждый экземпляр 1cv7s.exe занимал ~400 объектов GDI.

Еще один вариант теста.
Мин. размер поставил = 1, макс. размер = 50.

Потом из 1С запустил такой скрипт:
Код
Выбрать все
	_нум =40; // у меня max = 31

	v7 =0;
	Если _нум >0 Тогда
		_сп =СоздатьОбъект("СписокЗначений");
		Для _ин =1 По _нум Цикл
			v7=CreateObject("v7AppServer.Connection");
			Сообщить("Итерация: " +Строка(_ин) +" " +v7.AppDispatch.EvalExpr("ТекущееВремя()"));
			_сп.ДобавитьЗначение(v7);
		КонецЦикла;
	КонецЕсли;
 


На 31 закончилось видать число объектов, общее для всей системы (даже меню в других процессах перестало отрисовываться).
W2k3 R2 Svr Sp1, 1Cv7s R27, локальная DBF база, ~400 файлов, ~400 USER, ~100 GDI на сеанс.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #28 - 16. Мая 2007 :: 11:33
Печать  
kms писал(а) 16. Мая 2007 :: 11:28:
Еще один вариант теста.

А что за конфа открывалась?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #29 - 16. Мая 2007 :: 11:36
Печать  
Uzhast писал(а) 16. Мая 2007 :: 11:33:
А что за конфа открывалась?

ТиС9
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #30 - 16. Мая 2007 :: 11:58
Печать  
...

Цифры какие-то неровные... Вроде как у меня в тесте достигается 16K USER объектов и 8K GDI на все процессы.

К сожалению, я не помню, менял ли я что-то на этой машине, или здесь все стандартно.
В предыдущих тестах, как я помню, для лимитов получал ровные цифры в 10000 на всех там и там на стандарте.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #31 - 16. Мая 2007 :: 12:06
Печать  
Объясните плз как организовать взаимодействие между 2 1С-ми. Или это не для этого применяется?
Получается что кроме пользователей которые работают у меня еще N экземпляров 1С будет?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #32 - 16. Мая 2007 :: 12:19
Печать  
Цитата:
Или это не для этого применяется?

ага
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #33 - 16. Мая 2007 :: 12:34
Печать  
steban писал(а) 16. Мая 2007 :: 12:19:
ага

Хорошо сказал Очень довольный

Степ, ты не заметил такого прикола с нашим сервером: в компонентс сервисез нажимаем правой на v7AppServer, делаем shut down.
А половина рабочих процессов 1cv7 не гаснет (остается активной), но больше сервером не используется и могут даже по таймауту не завершиться.

Может, я что-то не понимаю?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Sergey
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 135
Зарегистрирован: 18. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #34 - 16. Мая 2007 :: 12:35
Печать  
Это хорошо  Улыбка
Но все таки зачем лишние процессы 1С?. Неужели пользовательские нельзя использовать?
Не врублюсь никак.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #35 - 16. Мая 2007 :: 13:00
Печать  
Господа, пора бы разьяснить "на пальцах" предназначение сего нововведения, а то получается узко-професиональный разговор проморгал ответы 4 и 6 (( Голова не тем забита.....
Я так понимаю, что это получается как-бы аналог OLE-подключения, только условно постоянное с разбросом нагрузки между подключениями. Можно спокойно использовать в WEB-е, отдавать "тяжелую" обработку данных серверу и т.п. Вроде так?

ПС1. Артем, а ты я надеюсь хороший админ, и знаешь че творишь....
ПС2. Для "0" для такой задачи 1С_7 нужно напильником обработать хорошенько, что-бы хотя бы 40-50 подключений на 1 комп тянула...
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #36 - 16. Мая 2007 :: 13:14
Печать  
trdm писал(а) 16. Мая 2007 :: 13:00:
Господа, пора бы разьяснить "на пальцах" предназначение сего нововведения, а то получается узко-професиональный разговор.

см. ответ #4, #6

Цитата:
ПС2. Для "0" для такой задачи 1С_7 нужно напильником обработать хорошенько, что-бы хотя бы 40-50 подключений на 1 комп тянула...


Запустил 60 сессий в том же тесте, который привел вверху, на той же базе.
Ограничение примерно в 30K USER.

Сильно больше не получится, т.к. кучу "of the application desktop" в 24576 сделать можно, а в 32768 уже нельзя

Мои мысли закинул сюда: http://www.1cpp.ru/forum/YaBB.pl?num=1179319930

А вообще, 50 - это весьма много.
Ибо это реальный пул и при уничтожении объекта на клиенте, серверный воркер освобождается немедленно.
Если есть задачи, где 50 объектов держатся клиентами постоянно, это уже вопрос к дизайну или необходимость реализации сервера по другой технологии.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #37 - 16. Мая 2007 :: 13:23
Печать  
trdm писал(а) 16. Мая 2007 :: 13:00:
Я так понимаю, что это получается как-бы аналог OLE-подключения, только условно постоянное с разбросом нагрузки между подключениями. Можно спокойно использовать в WEB-е, отдавать "тяжелую" обработку данных серверу и т.п. Вроде так?

Да вроде того.
OLE подключение, еще и кластеризуемое, как оказалось (пока правда не пробовал)

Насчет тяжелой работы - не знаю, я в свое время думал над работой легкой, но в распределенном виде через открытые сети.
А то, как это получилось у Степана - это другой вариант, как оказалось очень интересный именно для локального применения и создания скриптовых решений, которым нужен доступ к данным 1С извне.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #38 - 16. Мая 2007 :: 13:30
Печать  
Такой вопрос: а как именуется подключение.
Условный пример: Допустим крутится 2 базы ТиС и ТиС+Ремонт,
Для ТиС мне желательно распечатать договор на поставку, получив из из подключения с ТиС атрибуты фирмы и клиента, а для ТиС+Ремонт мне нужно таким же макаром распечатать другой документ...
Но обьект то у меня 1.
  
Наверх
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #39 - 16. Мая 2007 :: 13:36
Печать  
trdm писал(а) 16. Мая 2007 :: 13:00:
Господа, пора бы разьяснить "на пальцах" предназначение сего нововведения

Допустим, пишешь ты веб-приложение для выполнения каких-нибудь операций с базой 1С.
Код, выполняющийся на веб-сервере, создает объект v77.Application, вызывает метод Initialize, ждет пока 1С запустится (5-10 секунд), выполняет какие-нибудь действия, и уничтожает ссылку на v77.Application (1С при этом закрывается).
Время работы скрипта=<время открытия 1С> + <время выполнения нужных действий>.
Для веб-приложения отклик 5-10 секунд неприемлем.
Скрипты на веб-сервере теряют свое состояние после завершения работы.
В IIS (ASP) для сохранения каких-либо ресурсов между вызовами можно использовать объекты Application или Session.
Если v77.Application создавать в Application (или Session), 1С будет запускаться 1 раз при старте сервера (или сессии).
А теперь представь, что на твой веб-сервер ломится десяток клиентов.
Если храним ссылку на v77.Application в объекте Application, то не смогут выполняться одновременные запросы (один объект на всех).
Если в Session, то для каждой сессии будет создаваться свой v77.Application, что тоже не есть хорошо, т.к. большую часть времени они будут простаивать.

А теперь самое интересное...
организуем пул из объектов v77.Application (Допустим минимум 5 и максимум 10).
5 адинэсок запущены и ждут запросов. Скрипт на сервере запрашивает ссылку из пула, выполняет с ней необходимые действия и возвращает её обратно в пул. Получается, что в твоем веб-приложении могут выполняться 5 одновременных действий с базой. Т.е. в зависимости от интенсивности запросов твое приложение может обслуживать десяток или больше пользователей. Если готовых к использованию объектов в пуле нет и верхний лимит объектов в пуле еще не превышен, то сервер приложений создает новый объект и по окончании работы возвращает его в пул. Если пул заполнен, то сервер в течении некоторого времени ждет освобождения объектов в пуле и если не дождался, то возвращает ошибку.
Вся эта кухня называется "пулингом ресурсов". Собственно пул содержится сервисом COM+. Компонент v7AppServer.Connection просто контейнер для v77.Application и еще удовлетворяет условиям сервиса COM+ для объектов, которые "can be pooled".

Кроме веб-приложений есть еще разные задачи, где этот механизм применим.
« Последняя редакция: 16. Мая 2007 :: 15:04 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #40 - 16. Мая 2007 :: 13:42
Печать  
к предыдущему посту добавлю:
клиент просто создает объект v7AppServer.Connection и его не волнует, откуда он возьмется.
Подробности пулинга от клиента скрыты.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #41 - 16. Мая 2007 :: 13:50
Печать  
Степан, а правда, как вторую базу подключить (как сделать второе соединение с другим конструктором). А? Круглые глаза
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #42 - 16. Мая 2007 :: 13:52
Печать  
Очевидных решений в голову не приходит.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #43 - 16. Мая 2007 :: 13:54
Печать  
сори, голову не ломай, это я так, разведываю возможности Улыбка
Хорошая ветка получилась, думаю из её материала выйдет отличная статья, а если оснастить работающими примерами и хорошей инструкцией с удовольствием приму в свой МСДН Улыбка
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #44 - 16. Мая 2007 :: 13:59
Печать  
steban писал(а) 16. Мая 2007 :: 13:52:
Очевидных решений в голову не приходит.

А если конструировать объект не сразу, а вызовом метода объекта v7AppServer.Connection?

Код
Выбрать все
	v7=CreateObject("v7AppServer.Connection"); // нет подключения
	v7.Connect("/d... /n... /p... /u..."); // собсно подключение
	Сообщить(v7.AppDispatch.EvalExpr("РабочаяДата()"));
 



как-то так
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #45 - 16. Мая 2007 :: 14:03
Печать  
kms писал(а) 16. Мая 2007 :: 12:34:
делаем shut down.
А половина рабочих процессов 1cv7 не гаснет (остается активной), но больше сервером не используется и могут даже по таймауту не завершиться.

Икс знает. Какие-то хитрости с подсчетом ссылок в 1С.
Может делать принудительный шатдаун адинэске при уничтожении v7AppServer.Connection?
Кто не спрятался - я не виноват.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #46 - 16. Мая 2007 :: 14:06
Печать  
kms писал(а) 16. Мая 2007 :: 13:59:
А если конструировать объект не сразу, а вызовом метода объекта v7AppServer.Connection?

Кажется, ерунда получится. Никакого пула так не выйдет Печаль
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #47 - 16. Мая 2007 :: 14:09
Печать  
kms писал(а) 16. Мая 2007 :: 13:59:
А если конструировать объект не сразу, а вызовом метода объекта v7AppServer.Connection?

чушь какая-то....
Все преимущества пула (быстрая активация/деактивация вместо медленного создания/уничтожения) сразу теряются.
И еще получится неопределенность - в одном пуле будут храниться разные объекты Печаль.
А т.к. у клиента нет возможностей управлять выборкой объектов из пула, то клиент будет участвовать в лотерее "получи соединение с нужной базой с 3-х попыток".
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #48 - 16. Мая 2007 :: 14:12
Печать  
Я раньше Улыбка

Т.е. в итоге пока решение - только перекомпилировать код с разными CLSIDами...
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #49 - 16. Мая 2007 :: 14:17
Печать  
На сервере ведется список баз:
"Бухгалтерия" "/DBuch ..."
"Торговля" "/DTorg ..."
...

При запуске сервера создается отдельный пул "Бухгалтерия", отдельный пул "Торговля" и т.д. Подключение клиента выглядит следующим образом:
Код
Выбрать все
v7=CreateObject("v7AppServer.Connection"); // нет подключения
v7.Connect("Торговля"); // собсно подключение - выделение свободного 1С из пула "Торговля"
Сообщить(v7.AppDispatch.EvalExpr("РабочаяДата()")); // доступ к 1С
  



Ну, как? Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #50 - 16. Мая 2007 :: 14:17
Печать  
Кстати, только что сделал alias - все работает Улыбка
Не надо ничего перекомпилировать, ура.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #51 - 16. Мая 2007 :: 14:17
Печать  
kms писал(а) 15. Мая 2007 :: 18:43:
Будет ли это работать в глобальных (неустойчивых, медленных, открытых) сетях?
Надо пробовать.

Еще будет вопрос прохождения трафика DCOM через маршрутизаторы.
Тут надо что-то придумывать.
Или как-то туннелировать DCOM - трафик (никогда этого не делал)
Или везде делать VPN (видимо, от этого все равно никуда не деться, шифровать трафик тоже надо).

Вроде бы есть возможность пользоваться сервисами COM+ через SOAP.
Надо разобраться......
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #52 - 16. Мая 2007 :: 14:21
Печать  
Uzhast писал(а) 16. Мая 2007 :: 14:17:
Код
Выбрать все
v7=CreateObject("v7AppServer.Connection"); // нет подключения
v7.Connect("Торговля"); // собсно подключение - выделение свободного 1С из пула "Торговля"
Сообщить(v7.AppDispatch.EvalExpr("РабочаяДата()")); // доступ к 1С
  


Ну, как? Улыбка

Отлично, если реализовывать пулинг самостоятельно.
А тут я пользуюсь готовым сервисом и вмешиваться в его механизмы не могу.

Кстати, решение уже найдено Подмигивание kms писал(а) 16. Мая 2007 :: 14:17:
Кстати, только что сделал alias - все работает Улыбка
Не надо ничего перекомпилировать, ура.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #53 - 16. Мая 2007 :: 14:25
Печать  
Цитата:
v7.Connect("Торговля"); // собсно подключение - выделение свободного 1С из пула "Торговля"


Кстати, так оно и получается фактически, только выглядит красивее:
Код
Выбрать все
v7=CreateObject("v7AppServer.Torgovlja.Connection.1");
 



Один только прикол - остановить сервер можно только для всех подключений (ну и всех баз, соответственно)  Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #54 - 16. Мая 2007 :: 14:27
Печать  
kms писал(а) 16. Мая 2007 :: 14:25:
Один только прикол - остановить сервер можно только для всех подключений (ну и всех баз, соответственно)  Улыбка

После создания псевдонима можно его переместить в другое приложение.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #55 - 16. Мая 2007 :: 14:33
Печать  
steban писал(а) 16. Мая 2007 :: 14:27:
После создания псевдонима можно его переместить в другое приложение.

Да, точно. Супер.
Кстати, без перемещения толком не работает (ну и не надо).
После перемещения все ОК.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #56 - 16. Мая 2007 :: 14:34
Печать  
steban писал(а) 16. Мая 2007 :: 14:03:
kms писал(а) 16. Мая 2007 :: 12:34:
делаем shut down.
А половина рабочих процессов 1cv7 не гаснет (остается активной), но больше сервером не используется и могут даже по таймауту не завершиться.

Икс знает. Какие-то хитрости с подсчетом ссылок в 1С.
Может делать принудительный шатдаун адинэске при уничтожении v7AppServer.Connection?
Кто не спрятался - я не виноват.



Тоже промучился полдня - ситуация такая же.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #57 - 16. Мая 2007 :: 14:39
Печать  
kms писал(а) 16. Мая 2007 :: 14:33:
Кстати, без перемещения толком не работает.

Еще добавлю, что после перекомпиляции не работает.
Лечится просто: в контекстном меню узла "Мой компьютер" жмакнуть "обновить все компоненты".
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #58 - 17. Мая 2007 :: 09:49
Печать  
А подробнее для тупых Печаль можно объяснить насчет создания алиаса и перемещения в другое приложение ?
Слаб я в КОМ+ Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #59 - 17. Мая 2007 :: 10:06
Печать  
artbear писал(а) 17. Мая 2007 :: 09:49:
А подробнее для тупых Печаль можно объяснить насчет создания алиаса и перемещения в другое приложение ?
Слаб я в КОМ+ Улыбка

Это поможет? http://www.citforum.ru/operating_systems/windows/complus/
http://www.firststeps.ru/mfc/activex/r.php?83
http://www.firststeps.ru/mfc/activex/r.php?84
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #60 - 17. Мая 2007 :: 10:09
Печать  
Это помогает понять КОМ+, но не как настроить доп.приложение и алиасы Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #61 - 17. Мая 2007 :: 11:12
Печать  
Как создать приложение и добавить в него компоненты написано в первом посте.
Псевдоним создается через контекстное меню узла компонента (в данном случае узла "v7AppServer.Connection.1") в консоли "службы приложений".
Консоль создаст для этого компонента новый ProgID и CLSID.
Через то-же самое контекстное меню можно переместить компонент в другое приложение.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #62 - 17. Мая 2007 :: 11:26
Печать  
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #63 - 17. Мая 2007 :: 11:39
Печать  
steban писал(а) 17. Мая 2007 :: 11:26:

У меня даже ведь ее замечательная толстая книжка по COM есть Улыбка
Просто про COM+ читать не стал - негде было использовать Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
big_uh
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 01. Июня 2007
Re: Сервер приложений для v7
Ответ #64 - 01. Июня 2007 :: 06:47
Печать  
Уважаемый steban, планируете ли вы опубликовать исходный код вашего компонента?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #65 - 01. Июня 2007 :: 07:11
Печать  
Там пока и публиковать нечего.
Это просто прототип.
Там даже не везде коды возврата проверяются Подмигивание
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
big_uh
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 01. Июня 2007
Re: Сервер приложений для v7
Ответ #66 - 04. Июня 2007 :: 10:19
Печать  
Давайте совместными усилиями дорабатывать. Такая штука нам сейчас очень пригодится. Плодить кучу велосипедов не хочется, лучше уж один реальный байк Улыбка
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #67 - 05. Июня 2007 :: 08:11
Печать  
big_uh писал(а) 04. Июня 2007 :: 10:19:
Давайте совместными усилиями дорабатывать. Такая штука нам сейчас очень пригодится.

= "давайте вы поработаете, а я попользуюсь"

Чтобы заниматься такими вещами, нужна заинтересованность (материальная или еще какая).

У меня в ближайшее время не предвидится задач, которые для решения потребовали бы сервера приложений.
Спонсировать разработку пока никто не собирается.

Компонент этот написан за 1 час в ответ на сообщение Михаила тут. Я просто показал, что "сервер приложений" довольно легко реализуется при помощи технологий COM+. Идея вообще лежала на поверхности, и любой профессионал, прочитав эту ветку, легко сможет повторить.

Для ленивых вот исходники:
  

v7AppServer_002.rar ( 15 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #68 - 05. Июня 2007 :: 08:19
Печать  
Если развивать это дело дальше, то могу наметить roadmap:
  • реализовать передачу клиенту сообщений об ошибках, возникших на сервере
  • разобраться с подсчетом ссылок (чтобы не зависали "working threads" после остановки сервера и наоборот, не отходили в мир иной слишком рано)


Уверен, что когда кто-нибудь возьмется применить эту технологию на практике, хотелки еще появятся Подмигивание
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
big_uh
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 01. Июня 2007
Re: Сервер приложений для v7
Ответ #69 - 05. Июня 2007 :: 08:32
Печать  
steban писал(а) 05. Июня 2007 :: 08:11:
big_uh писал(а) 04. Июня 2007 :: 10:19:
Давайте совместными усилиями дорабатывать. Такая штука нам сейчас очень пригодится.

= "давайте вы поработаете, а я попользуюсь"

Зря Вы так.

Идея действительно очевидна. И повторить я пробовал. Однако возникла проблема.
После помещения в пул com-объект 1С у меня почему то умирал. Возможно потому, что я использовал для хранения ссылки CComDispatchDriver. У Вас же используется IDispatch*. В остальном же мой компонент идентичен. Хотелось докопаться до истины Улыбка
Спасибо за исходники.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #70 - 05. Июня 2007 :: 08:48
Печать  
big_uh писал(а) 05. Июня 2007 :: 08:32:
Зря Вы так.

Ну чуток недопоняли друг друга Подмигивание
бывает....
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
big_uh
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 01. Июня 2007
Re: Сервер приложений для v7
Ответ #71 - 07. Июня 2007 :: 06:49
Печать  
Ещё один вариант сервера. Вызовы интерфейса IConnection компонента V7Server.Connection напрямую транслируются интерфейсу IDispatch  OLE-объекта 1С.

Т.е. теперь вместо
v7.AppDispatch.EvalExpr("РабочаяДата()")

нужно писать

v7.EvalExpr("РабочаяДата()")

Вроде бы работает передача сообщений об ошибках и ссылки считаются правильно. Но это ещё нужно проверить.
Исходники прилагаются
  

V7Server.zip ( 70 KB | Загрузки )
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #72 - 08. Сентября 2007 :: 05:09
Печать  
Как говорится "UP"

Подмигивание Есть какие нибудь новости по проекту?
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #73 - 08. Сентября 2007 :: 11:22
Печать  
steban писал(а) 05. Июня 2007 :: 08:11:
Чтобы заниматься такими вещами, нужна заинтересованность (материальная или еще какая).

У меня в ближайшее время не предвидится задач, которые для решения потребовали бы сервера приложений.
Спонсировать разработку пока никто не собирается.



Тут Степан в принципе отразил свою точку зрения. И я его понимаю Улыбка
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Сервер приложений для v7
Ответ #74 - 04. Апреля 2008 :: 20:03
Печать  
МДА!
Вот это вы МУЖИКИ ЗАВЕРНУЛИ!
блин я о таком даже и не думал!
Читал и пытался въехать.
Кое-что несовсем понятно,но общий смысл УРАГАН!
Вот если бы это все еще и наделе применить!
Правда у мене задач то таких пока нету.
НО!
Все таки здорово!
  
Наверх
 
IP записан
 
Jeen
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 05. Июня 2008
Re: Сервер приложений для v7
Ответ #75 - 05. Июня 2008 :: 08:42
Печать  
steban писал(а) 05. Июня 2007 :: 08:11:
Чтобы заниматься такими вещами, нужна заинтересованность (материальная или еще какая).



Есть заинтересованность в продукте. Форум не дает отправить в личку сообщение, поскольку новичек. Steban, если не трудно, отпишите в личку e-mail или аську для обсуждения материальной стороны вопроса.
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #76 - 22. Августа 2008 :: 12:02
Печать  
Так как тема удаленного запуска не раскрыта добавляю от себя:

Для организации удаленного доступа к v7Server с другого компьютера в дополнение к действиям, указанным в первом посте необходимо сделать следующее

1. Жмакнуть правой кнопкой мыши на созданном COM+ приложении V7AppServer и нажать Экспорт.
2. В Мастере экспорта приложений выбрать Экспортировать как Прокси приложение. Указать имя и каталог создаваемого файла MSI. Можно указать сетевой путь, доступный с клиентского компьютера. В результате работы мастера получим набор файлов для инсталляции на клиентском компьютере
3. Пересесть за клиентский компьютер, жмакнуть на получившийся файл MSI. Пользователь за клиентским компом должен иметь права на управление компонентами. В Службе компонентов клиентского компьютера должно появиться приложение V7AppServer.
4. Перезапустить V7AppServer на первом компьютере. Если не будет ограничений безопасности, то все должно заработать.

Семерка становится трехзвенной!
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Сервер приложений для v7
Ответ #77 - 22. Августа 2008 :: 22:00
Печать  
Alex_Bob писал(а) 22. Августа 2008 :: 12:02:
Так как тема удаленного запуска не раскрыта добавляю от себя:

Для организации удаленного доступа к v7Server с другого компьютера в дополнение к действиям, указанным в первом посте необходимо сделать следующее

1. Жмакнуть правой кнопкой мыши на созданном COM+ приложении V7AppServer и нажать Экспорт.
2. В Мастере экспорта приложений выбрать Экспортировать как Прокси приложение. Указать имя и каталог создаваемого файла MSI. Можно указать сетевой путь, доступный с клиентского компьютера. В результате работы мастера получим набор файлов для инсталляции на клиентском компьютере
3. Пересесть за клиентский компьютер, жмакнуть на получившийся файл MSI. Пользователь за клиентским компом должен иметь права на управление компонентами. В Службе компонентов клиентского компьютера должно появиться приложение V7AppServer.
4. Перезапустить V7AppServer на первом компьютере. Если не будет ограничений безопасности, то все должно заработать.

Семерка становится трехзвенной!


А как получать большие массивы(например ТЗ - как результат запроса) с сервера на клиента ?
Если в цикле - это не cool.
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #78 - 29. Августа 2008 :: 14:28
Печать  
По мотивам сырцов, опубликованных в этой ветке собрал аналогичный сервер для объекта v81.ComConnector восьмерки. Все работает аналогично v7AppServer, но строку в конструкторе нужно брать как для метода Connect.

Вопрос к знатокам VC80. Сделал MSI файл для экспорта на другой компьютер. При установке компонента на другой компьютер с XP без Студии инсталлятор выдал ошибку, что не установлен Microsoft.VC80.CRT. Порылся в Инете, нашел, что нужны библиотеки msvcp80.dll, msvcr.dll и vcomp.dll с манифестами. Нашел библиотеки на компе, где компилировал v8Server.dll, скопировал на другой комп, после этого инсталляция прошла нормально.
Cам вопрос в следующем: что можно подкрутить в опциях компиляции, чтобы избавиться от зависимости?
  

v8Server.zip ( 39 KB | Загрузки )

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сервер приложений для v7
Ответ #79 - 29. Августа 2008 :: 16:36
Печать  
Ну, VC8 использует CRT8, VC9 - CRT9.
И стандартная библиотека (msvcp*) также используется в большинстве проектов.

Как избавиться в общем случае - не знаю.
Для сборки icpp мы используем icl, частично заголовки от vc6, stlport.
В таком режиме зависимостей от новых CRT нет.
Где-то в разделе "разработка" была инструкция по сборке icpp.

А может быть, не надо избавляться?
Потребовать установки CRT redist - и все.

P.S.
Что-то еще (какой-то из своих проектов) steban собирал без зависимостей, но я не скажу сейчас, в каком виде и на какой платформе.
Я хотел было поинтересоваться, да запамятовал.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
quick
Junior Member
**
Отсутствует


LinuxMint, python, CodeTyphon

Сообщений: 83
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 21. Февраля 2008
Пол: Мужской
Re: Сервер приложений для v7
Ответ #80 - 23. Октября 2008 :: 11:43
Печать  
Alex_Bob писал(а) 22. Августа 2008 :: 12:02:
Так как тема удаленного запуска не раскрыта добавляю от себя:

Для организации удаленного доступа к v7Server с другого компьютера в дополнение к действиям, указанным в первом посте необходимо сделать следующее

1. Жмакнуть правой кнопкой мыши на созданном COM+ приложении V7AppServer и нажать Экспорт.
2. В Мастере экспорта приложений выбрать Экспортировать как Прокси приложение. Указать имя и каталог создаваемого файла MSI. Можно указать сетевой путь, доступный с клиентского компьютера. В результате работы мастера получим набор файлов для инсталляции на клиентском компьютере
3. Пересесть за клиентский компьютер, жмакнуть на получившийся файл MSI. Пользователь за клиентским компом должен иметь права на управление компонентами. В Службе компонентов клиентского компьютера должно появиться приложение V7AppServer.
4. Перезапустить V7AppServer на первом компьютере. Если не будет ограничений безопасности, то все должно заработать.

Семерка становится трехзвенной!


Спасибо. Попробовал.. но к сожалению при создании объекта на другом компьютере говорит "Разрешение отклонено: "Create object"". Компы не в домене, с безопасностью перепробовал разные варианты.. до дего то не догоняю походу
  
Наверх
ICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #81 - 23. Октября 2008 :: 13:21
Печать  
Давай подробнее.
1. На первом компе (сервере) V7AppServer работает нормально?
2. После переноса приложения на клиентском компе в службе компонентов приложение создалось?
3. Во время опробования на клиентском компе на сервере V7AppServer запущен?
4. Если компы не в домене, то возможно пользователь клиентского компьютера должен быть прописан на серверном компе с правами доступа к DCOM.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
Jeen
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 05. Июня 2008
Re: Сервер приложений для v7
Ответ #82 - 05. Апреля 2009 :: 09:58
Печать  
Alex_Bob писал(а) 29. Августа 2008 :: 14:28:
По мотивам сырцов, опубликованных в этой ветке собрал аналогичный сервер для объекта v81.ComConnector восьмерки. Все работает аналогично v7AppServer, но строку в конструкторе нужно брать как для метода Connect.


V8Server устанавливается, активизируется, устанавливает подключения к 1С. Но при попытке получить подключение с помощью AppDispatch - говорит, что имя неизвестно. И в консоли служб компонентов метода AppDispatch нету у компонента V8Server.Connection, а у v7AppServer.Connection - есть такой метод. Думал, может чего не так у меня - пробовал на двух компах, не получается. Чего-то со свойством AppDispatch не то...

/////////////////////////////////////////////////////

Update 08.04.2009
Разбирающиеся люди подсказали, что компонент работает не очень аналогично v7AppServer. Отличие в AppDispatch - он стал не нужен. Компонент напрямую перенаправляет вызовы на созданное подключение. То есть там, где в 77 использовался код:

V7 = new COM("v7AppServer.Connection");
V7.AppDispatch.Метод(...);

Для восьмерки работает вот так:

V8 = new COM("V8Server.Connection");
V8.Метод(...);

Вопрос закрыт. Спасибо Alex_Bob, который переписал компонент для восьмерки и Ярославу Васильеву, который помог разобраться с вопросом.
« Последняя редакция: 08. Апреля 2009 :: 14:07 - Jeen »  
Наверх
 
IP записан
 
Jeen
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 3
Зарегистрирован: 05. Июня 2008
Re: Сервер приложений для v7
Ответ #83 - 18. Марта 2011 :: 13:28
Печать  
Как насчет V82?
  
Наверх
 
IP записан
 
patronize
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 1
Зарегистрирован: 10. Октября 2011
Re: Сервер приложений для v7
Ответ #84 - 10. Октября 2011 :: 11:51
Печать  
Люди ,помогите!

"включить флажок "Включить создание объектов" и в поле "строка конструктора" написать параметры командной строки для 1С (например: /dC:\BAZA\ /NБот /P123)"

Как в этом моменте будет выглядить строка для 8.1 файловой ?
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #85 - 10. Октября 2011 :: 18:52
Печать  
Цитата:
Как в этом моменте будет выглядить строка для 8.1 файловой ?

Так, как ты бы ее указывал для подключения через ComConnector:

File="c:\BAZA";Usr=Бот;Pwd=123;

Цитата:
Как насчет V82?


http://infostart.ru/public/93643/ Если еще актуально
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #86 - 27. Октября 2011 :: 07:39
Печать  
Alex_Bob писал(а) 10. Октября 2011 :: 18:52:
Цитата:
Как в этом моменте будет выглядить строка для 8.1 файловой ?

Так, как ты бы ее указывал для подключения через ComConnector:

File="c:\BAZA";Usr=Бот;Pwd=123;

Цитата:
Как насчет V82?


http://infostart.ru/public/93643/ Если еще актуально



Класс - проект ожил. Я там на Инфостарте плюс поставил.

Есть парочка вопросов:

1. проблему с зависшими COM соединениями на v8.* не наблюдал, по аналогии что было с OLE подключениями для v7 ?
2. не разбирался как создать возможность аутентификации на клиентском компьютере ? чтобы не все имели доступ к возможности использовать удаленный вызов (а то дыра внутрь 1С получается Подмигивание)

Плюс небольшой совет:

Ты бы включил в описание на Инфостарте что можно COM+ запускать как службу Windows без использования WMI  

---

Кстати - в свое время после совета Степана я читал вот эту статейку http://msdn.microsoft.com/en-us/library/windows/desktop/ms678858(v=vs.85).aspx

При таком подходе получается Web сервис из коробки с пулом соединений к 1С, и не придется "ваять" свою реализацию (иногда такое очень нужно - потому что фактически 1С движок Web сервисов работает очень нестабильно при количестве клиентов более 50)
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #87 - 27. Октября 2011 :: 11:32
Печать  
lustin писал(а) 27. Октября 2011 :: 07:39:
1. проблему с зависшими COM соединениями на v8.* не наблюдал, по аналогии что было с OLE подключениями для v7 ?

По моему эта проблема исчезла и на v7 после публикации варианта в посте #71. На v8 пока не замечено, так как я брал за основу исходники оттуда-же.

Цитата:
2. не разбирался как создать возможность аутентификации на клиентском компьютере ? чтобы не все имели доступ к возможности использовать удаленный вызов (а то дыра внутрь 1С получается Подмигивание)

Только если отказаться от использования авторизации 1С и городить что-то свое  Печаль. Наверно это самый большой минус этого подхода. Весь его смысл в том, что мы заранее создаем авторизованное подключение, а потом раздаем его по требованию.

Цитата:
Кстати - в свое время после совета Степана я читал вот эту статейку http://msdn.microsoft.com/en-us/library/windows/desktop/ms678858(v=vs.85).aspx

При таком подходе получается Web сервис из коробки с пулом соединений к 1С, и не придется "ваять" свою реализацию (иногда такое очень нужно - потому что фактически 1С движок Web сервисов работает очень нестабильно при количестве клиентов более 50)


У меня пока таких задач не возникало. Будет время - попробую провести эксперимент. Если что получится - отпишусь.
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #88 - 27. Октября 2011 :: 13:57
Печать  
Alex_Bob писал(а) 27. Октября 2011 :: 11:32:
Цитата:
Кстати - в свое время после совета Степана я читал вот эту статейку http://msdn.microsoft.com/en-us/library/windows/desktop/ms678858(v=vs.85).aspx

При таком подходе получается Web сервис из коробки с пулом соединений к 1С, и не придется "ваять" свою реализацию (иногда такое очень нужно - потому что фактически 1С движок Web сервисов работает очень нестабильно при количестве клиентов более 50)


У меня пока таких задач не возникало. Будет время - попробую провести эксперимент. Если что получится - отпишусь.



оставлю здесь информацию - чтобы не потерялась

"Вызов COM+ через SOAP"

цитата взята отсюда
Цитата:
The SOAP section from the activation tab does not exist in win7/win2008 (despite the fact it exists in documentation), so in order to expose your old com+ application as soap xml web service, you need to write new xml web service that passes the calls to appropriate com+ methods.


вольный перевод

Цитата:
Секция "Использовать SOAP" отсутствует в win7/win2008 (несмотря на то, оно существует в документации), и если вы захотите использовать ваше старое приложение com+ в качестве веб-сервиса, вы должны будете сами написать xml веб-сервис который будет пропускать вызовы в соответствующие методы com+


однако как оказалось, проблема еще и в том что наш COM+ компонент не экспортирует методы  - почему в консоли компонентов пустой список методов - возможно еще и поэтому нет возможности использовать опцию "Uses SOAP", такое впечатление что каким то образом придется реализовывать метод ExecuteRequest() Подмигивание

P.S. выставил на локальной машине 3000 конектов к серверу 1С в качестве минимального размера пула, максимально подняло 174 соединения и больше не захотела Подмигивание : служба съела 1 708 784 kb памяти (Win 7 x64), после этого служба была убита самим Windows.


  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #89 - 28. Октября 2011 :: 09:55
Печать  
Цитата:

P.S. выставил на локальной машине 3000 конектов к серверу 1С в качестве минимального размера пула, максимально подняло 174 соединения и больше не захотела Подмигивание : служба съела 1 708 784 kb памяти (Win 7 x64), после этого служба была убита самим Windows.


Это садомазохизм.  Смех  Но тем не менее даже сотня, я считаю приличный результат. А сколько же у вас лицензий? По идее каждый коннект должен отъедать одну клиентскую лицензию. Или речь о v7?
  

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #90 - 28. Октября 2011 :: 11:28
Печать  
Alex_Bob писал(а) 28. Октября 2011 :: 09:55:
Цитата:

P.S. выставил на локальной машине 3000 конектов к серверу 1С в качестве минимального размера пула, максимально подняло 174 соединения и больше не захотела Подмигивание : служба съела 1 708 784 kb памяти (Win 7 x64), после этого служба была убита самим Windows.


Это садомазохизм.  Смех  Но тем не менее даже сотня, я считаю приличный результат. А сколько же у вас лицензий? По идее каждый коннект должен отъедать одну клиентскую лицензию. Или речь о v7?


Это я так, ради эксперимента проверил - для x86 это предел составил 134 соединения.
Сразу возник вопрос как "распарралелить" COM+ приложение - на несколько рабочих процессов: хочется понять предел производительности.

А лицензий у нас в локальной сети много - 1000 наверное наберется (если не больше).

Нашел проект http://www.soapui.org/ - хочется попробовать нагрузить связку SOAP->COM+->COM->1C Сервер->SQL


  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Donat
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 152
Зарегистрирован: 29. Мая 2006
Re: Сервер приложений для v7
Ответ #91 - 29. Октября 2011 :: 07:24
Печать  
Здравствуйте.

Цитата:
http://infostart.ru/public/93643/ Если еще актуально


Выложите пожалуйста здесь, я на инфостарте плюсанул, а скачать не могу.
Заранее спасибо!
  
Наверх
 
IP записан
 
Alex_Bob
Full Member
***
Отсутствует



Сообщений: 136
Местоположение: Липецк
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #92 - 31. Октября 2011 :: 06:38
Печать  
Выкладываю и здесь v82server.dll
  

v82Server.zip ( 42 KB | Загрузки )

Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #93 - 31. Октября 2011 :: 13:57
Печать  
Вот же веселая история...

Пытался научится вызывать созданный COM+ из ASP.NET

в интернете в основном описаны методы когда сам компонент написан на C# и его можно подключить как ссылку к проекту.
Однако в нашем случае все оказывается намного веселее

метод типа
Цитата:
Type objType = Type.GetTypeFromProgID("V8Server.Connection");

object connector = Activator.CreateInstance(objType);

object[] args = { };

objType.InvokeMember("UserName", BindingFlags.InvokeMethod,null, connector, null);

не взлетает.
в переменную приезжает objType = null, по неизвестной мне причине - как зарегистрировать ProgID

попробовал взяться с другого конца

Цитата:
Guid comPlusCLID = new Guid("691427AE-51B1-4DD1-9EC8-878087F3530E");
Type objType = Type.GetTypeFromCLSID(comPlusCLID);

object connector = Activator.CreateInstance(objType);


Код
Выбрать все
System.UnauthorizedAccessException: Сбой при получении производства объектов класса COM для компонента с CLSID {691427AE-51B1-4DD1-9EC8-878087F3530E} в результате следующей ошибки: 80070005.
 



CLSID наглым образом скопирован из закладки свойства нашего компонента в службе компонентов

---

и только после этого стало ясно - что необходимо настроить DCOM с точки зрения безопасности от ASP.NET

Использовалась вот эта статья вот эта статья

уф. и теперь хотя бы удалось запустить

Код
Выбрать все
[WebMethod]
        public string HelloWorld()
        {
            Guid comPlusCLID = new Guid("691427AE-51B1-4DD1-9EC8-878087F3530E");
            Type objType = Type.GetTypeFromCLSID(comPlusCLID);

            object connector = Activator.CreateInstance(objType);
            
            object[] args = { };

            string helloWorldString = (string)Invoke(connector, "ИмяПользователя", args, objType) + (string)Invoke(connector, "СтрокаСоединенияИнформационнойБазы", args, objType);
            return helloWorldString;

        }

        private object Invoke(object connector, string methodName, object[] args, Type objType)
        {
            return objType.InvokeMember(methodName, BindingFlags.InvokeMethod, null, connector, args);
                
        
        }
 



Возможно есть более красивый способ подключения COM+ к ASP.NET проекту - но мне он пока неизвестен

B самое главное - пул выставлен от 10 до 120 объектов: в активных пользователях вижу 10 активных соединений

Если вызвать Web сервис ASP 11 раз v8server создаст 11-ое соединение с 1С и даже хотя вызовов больше не происходит НЕ будет очищать пул соединений - видимо я что-то "не умею готовить"




  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Сервер приложений для v7
Ответ #94 - 31. Октября 2011 :: 19:26
Печать  
ну вообщем итог экспериментов

тестировалась связка

разработческий компьютер (HP Pavilion Elite HPE-400 Core i7 2.93 RAM 8Gb)
0. soapUI - проверка нагрузки Web службы
1. IIS (ASP.Net Web Service) - SOAP
2. COM+ Component v8Server - размер пула от 10 до 100 объектов

тестовый сервер 1С 8.2.13.219
чего то там внутри "блэйда" - на нем обычно тестируются базы от 100 GB, так что что-то производительное

тестовый сервер MSSQL 2008R2
чего-то тоже внутри блэйда но с довольно вменяемой дисковой - тестируются обычно время выполнения реструктуризации и вообще регламентных работ


---

тестировались два метода тестовой Web службы

1. string HelloWorld - вызывались два метода 1С ИмяПользователя() и СтрокаСоединенияИнформационнойБазы()

2. int RemainGood(int code) - вызов метода общего модуля 1С (найти номенклатуру по коду, получить количество Не нулевых остатков серийных номеров) - количество движений в регистре 333000000 записей, количество итогов 7000000 записей в таблицах SQL.

замеры производились по сценариям. перед выполнение каждого сценария машина перезагружалась и службы IIS, COM+ и 1С перезапускались - temp файлы очищались

simple (простой режим)
время выполнения сценария 600 секунд
количество одновременных потоков 120
задержка работы потока - <случайное число от 1 до 100 миллисекунд>

thread (потоковый режим)
время выполнения сценария 600 секунд
количество одновременных потоков от 10 до 120 с пропорциональным шагом
задержка при вызове не происходит - все потоки выполняются одновременно

burst (тестирование взрывом)
время выполнения сценария 600 секунд
количество одновременных потоков 120
задержка при вызове не происходит - все потоки выполняются одновременно
длина шага запуска всех 120 потоков - 60 секунд (старт работы всех потоков)
длина шага задержки - 30 секунд (стоп работе всех потоков)

результаты:
имя сценария helloWorld RemainGood
simple max 1400ms, avg 19ms, min 3ms, err 0, count 1079000 max 4409ms, avg 223ms, min 123ms, err 0, count 89078
thread max 1540ms, avg 34ms, min 12ms, err 0, count 1241798 max 3400ms, avg 256ms, min 146ms, err 0, count 234987
burst max 1745ms, avg 43ms, min 14ms, err 0, count 946336 max 4907ms, avg 381ms, min 201ms, err 0, count 102569

разъяснение:
max - максимальное время вызова
avg - среднее время вызова
min - минимальное время вызова
err - количество ошибок
count - общее количество вызовов за время сценария

до сих пор не понимаю как система понимает что один из объектов пула освободился для выполнения другим клиентским вызовом
во всех тестовых сценариях COM+ приложение создавало от 83 до 92 COM соединений к 1С - до предела в 100 так и не добрался (на досуге попытаюсь выбраться к пределу и посмотреть кто упадет в таком случае)

P.S. в коде выше чтобы не было зависших объектов приходится принудительно делать connector =null
P.S.S. А ниче так жизнеспособная схемка получилась  Со сжатыми губами - 1C-ный то Web сервис при 50 потоках ниже секунды не показывал
P.S.S.S. И еще - никакого тонкого тюнинга на стороне IIS и COM+ пока не производилось, данный результаты получены в рамках штатных установок

в эти выходные буду в Липецке - покажу данные своему коллеге - вместе с которым пытались построить почти тоже самое, но собственными силами (проект OneCService назывался  Со сжатыми губами)
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать