CRM-система для УК и ТСЖ

Поддержка длинных строк

Будете спамить рекламой - будем нещадно банить)))
Сообщение
Автор
two_oceans
Бывалый
Сообщений: 432
Зарегистрирован: 30 сен 2016, 17:17
Благодарил (а): 383 раза
Поблагодарили: 351 раза

Поддержка длинных строк

#41 Сообщение two_oceans » 09 окт 2017, 07:34

В четверг придумал новую идею - сделать библиотеку-основу для генерации XML и к ней подключать библиотеки-плагины с описанием определителя адреса сервиса, конкретных сервисов и частей сервисов. Предполагается встроенная поддержка тестового сервиса СМЭВ. Регистрацию плагинов сделал, дело за их перечислением и загрузкой. Количество библиотек явно возрастет. 4 библиотеки без отладочных символов (182 Кб) + приложение с отладочными (825 Кб) = 1007 Кб. Основа для генерации - 90 Кб, не сплюсована, потому что частично дублирует программу.
С длинными строками эпопея продолжается - попробовал подключить FindFirstFileA копированием декларации из модуля windows (так как там все и сразу - много ненужного) - не взлетело, Access Violation. Сначала подумал, что функции ядра не принимают память выделенную процессу, углубился в это и не нашел ничего необычного, через кучу промежуточных вызовов и коррекций размера дело пришло к HeapAlloc(GetProcessHeap(),0,size), то есть используется куча по-умолчанию, а не какая-то другая и приватная. Память из стека или из программы тоже не сработала.
Потом подключил весь модуль windows целиком - взлетело. Путем разбора деталей выяснилось, что все просто - в исходниках модуля windows проставлено stdcall по умолчанию для всех функций, а в декларации каждой отдельной stdcall не написано. В моей программе по умолчанию не stdcall и потому его нужно указывать. Дописал в скопированную строчку stdcall; и тадам - теперь файл читается не вслепую, а с учетом информации о его существовании и размере. Попутно починил и другие скопированные декларации, как ни удивительно, некоторые функции каким-то чудом работали и без этого.

two_oceans
Бывалый
Сообщений: 432
Зарегистрирован: 30 сен 2016, 17:17
Благодарил (а): 383 раза
Поблагодарили: 351 раза

Поддержка длинных строк

#42 Сообщение two_oceans » 17 ноя 2017, 13:27

За прошедший месяц внес некоторые изменения в схему - вынес в отдельные библиотеки работу с HTTP, алгоритмами ГОСТ и пространствами имен. Подписание тоже вынесено в библиотеку. Суммарно вышло 11 библиотек, при проверке подписи используются 7 из них; 3 отвечают за генерацию; 1 за HTTP. Базовые адреса им назначил разные, теперь смотрю как их по памяти оптимизировать.

Идея с основой для соап и подключаемыми библиотеками тоже в некоторой степени реализована, но еще не до конца, продолжаю менять форму и форматы. На текущий момент предполагается 3-4 уровня надстроек над основой - 1) концентратор сервисов (пространство узлов на которых сервисы совпадают, но могут отличаться по количеству сервисов, например, ГИС ЖКХ и СМЭВ), тут реализуются процедуры адресации и базовые части для всех сервисов одного концентратора; 2) сервис и операция (формирование сервисного тега); 3) подсервис - формирование внутреннего содержания сервисного тега. Естественно будут еще процедуры для формирования повторяющихся в сервисе тегов, но они будут вызываться внутри подсервиса и не регистрирутся. Уровня 3 или 4 пока не ясно - не могу понять стоит ли выделять операцию в отдельный уровень.
Предполагается, что уровни взаимодействуют через основу, в которой регистрируются адреса процедур, поэтому уровни могут быть как в одной библиотеке, так и в разных. Также основа отвечает за базовое формирование конверта SOAP, настройку взаимодействия с адресом сервиса по http и прочие базовые операции (вроде формирования guid). Плюс предполагается функция-комбайин, которая будет принимать указатели на стируктуры параметры для разных уровней, потом собирать из этого XML, вызывая зарегистрированные адреса концентраторов, сервисов и подсервисов.

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

В плане алгоритмов попробовал проверить подпись для гис жкх и не смог, так как у меня более-менее отлажена эксклюзивная каноникализация, а там - то вообще не указана никакая, то указана не-эксклюзивная. Полистал примеры не-эксклюзивной - по примерам весь контекст предков включается в тег верхнего уровня фрагмента. Не могу понять, что делать если вообще не указана. Оставить без изменений нельзя, потому что тогда во фрагменте нет определения пространств имен (и контекста предков вообще), но по не-эксклюзивной тоже сумма не выходит.


Вернуться в «ГИС ЖКХ. Форум разработчиков программного обеспечения и всего, что с ним связано»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 1 гость