|
v7: Ошибка MFC42.DLL(память не может быть read) | ☑ | ||
---|---|---|---|---|
0
sergei10006
03.02.20
✎
12:12
|
Здравствуйте уважаемые друзья! Срочно нужна помощь,помогите плиз. Пишу обмен с МДЛП на 1С 7.7 платформа(027). При загрузки данных сравнительно не большого объема(от 500 килобайт) в любой com объект возникает
ошибка "Ошибка MFC42.DLL исключение unknown software exception 0x800000fb в приложении по адресу 0x....... инструкция по адресу 0x....... обратилась к памяти по адресу 0x....... Память не может быть read" При чем такая ошибка возникает как на сервере так и на локальных ПК и под разными версиями ОС. Как можно обойти этот глюк платформы? Или это не глюк платформы? Но почему он возникает на совершенно разных машинах? Вот пример: CDO=СоздатьОбъект("CDO.Message"); БодиПарт=CDO.BodyPart; Поля=БодиПарт.Fields; Поле=Поля.Item("urn:schemas:mailheader:content-type"); Поле.Value="text/plain; charset=""windows-1251"""; Поля.Update(); Stream = БодиПарт.GetDecodedContentStream(); Stream.charset = "windows-1251"; Stream.WriteText(Стр);//Вот тут, если текст больше 500 кб то система отваливается. Stream.Flush(); БодиПарт.ContentTransferEncoding = Кодировка; Stream=БодиПарт.GetEncodedContentStream(); Возврат Stream.ReadText(); Пробовал запускать этот код и из под 8.3, там все ок. Вот сижу и думаю писать внешние dll или все таки можно найти решение. Пробовал отключать службу DEP, добавлять память в файл подкачки,копировать mfc42.dll в корень 1С 7.7 ни чего не помогло( |
|||
1
Ёпрст
03.02.20
✎
12:26
|
в реестре один параметр поправить
|
|||
2
sergei10006
03.02.20
✎
12:35
|
"в реестре один параметр поправить"
А какая ветка и какой параметр? Можно по подробнее ? |
|||
3
trad
03.02.20
✎
12:38
|
(1) чито? O_O
|
|||
4
Kigo_Kigo
03.02.20
✎
13:10
|
(3) Тут наверно должна прозвучать фраза (1) "Круасафчег памаги" Бгггг :)))
|
|||
5
Ёпрст
03.02.20
✎
13:22
|
(3) не чито, спутал с открытием большого количества окон в терминале, там помогала правка параметра в реестре
|
|||
6
sergei10006
03.02.20
✎
13:25
|
(5) Так какой параметр ? Может и в этой ситуации поможет)
|
|||
7
Garykom
гуру
03.02.20
✎
13:25
|
(0) Возьми https://github.com/Garykom/mdlp и не страдай херней
|
|||
8
sergei10006
03.02.20
✎
13:31
|
(7) Спасибо!!! Интересно, надо посмотреть),а как отправка осуществляется вызовом из 1С 7.7 ? а то если так то объект XMLHTTP то же вызывает аналогичную ошибку при отправке данных больше 500 кб если запуск из 1С XMLHTTP.Send(ТелоЗапроса) если ТелоЗапроса > 500 кб , то 1С 7.7 отваливается.
|
|||
9
sergei10006
03.02.20
✎
13:38
|
(7) А stunnel можно пользоваться для отправки в МДЛП ? Это по закону нормально ?
|
|||
10
Garykom
гуру
03.02.20
✎
13:39
|
(8) WinHTTP отправляет
(9) А как иначе ГОСТ 2012 сделаешь? |
|||
11
sergei10006
03.02.20
✎
13:43
|
(10) Ни знаю я просто не пользовался stunnel, слышал что это какая то полу легальная прога)
|
|||
12
sergei10006
03.02.20
✎
13:46
|
(10) у меня вот так открывается https соединение "XMLHTTP.Open (Метод, "https://"+Ресурс+АдресЗапроса, -1)" + сертификаты загружены от МДЛП и от крипто про
|
|||
13
sergei10006
03.02.20
✎
13:47
|
(7) Спасибо еще раз!!! буду разбираться.
|
|||
14
Ёпрст
03.02.20
✎
13:52
|
(6)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows по дефолту параметр SharedSection=1024,3072,512 рекомендации лучших собаководов: 5120,6400,5120 больше ставить не стОит, начинаются маловнятные, но неприятные глюки, вплоть до невозможности загрузиться." |
|||
15
Garykom
гуру
03.02.20
✎
13:59
|
(11) Это легальная прога от криптопро
|
|||
16
Garykom
гуру
03.02.20
✎
14:01
|
(12) Боюсь нихрена там не откроется дальше кроме запроса токена без stunnel-msspi у тя
|
|||
17
Garykom
гуру
03.02.20
✎
14:01
|
(14) ТС бы винду на нормальную x64 поменять из новых 7ку или 10ку
|
|||
18
sergei10006
03.02.20
✎
14:05
|
(16) Ни знаю, я вроде во всю обмениваюсь по API с МДЛП, просто возник вопрос по документам больших объемов, тут вот и поймал полный затык)
Не фирма мало бюджетная)) еле концы с концами сводит.А если с сервера 2003 на новый переходить да или ПО новое покупать очень накладно будет))) |
|||
19
sergei10006
03.02.20
✎
14:06
|
(16) Если все сертификаты в порядки и стоит крипто про то все работает как надо)
|
|||
20
sergei10006
03.02.20
✎
14:07
|
(14) Спасибо !!! попробую вдруг поможет
|
|||
21
Garykom
гуру
03.02.20
✎
14:14
|
(18) Документы больших объемов надо по webdav
|
|||
22
trad
03.02.20
✎
14:19
|
(20) не поможет. Это совсем другая песня
|
|||
23
Garykom
гуру
03.02.20
✎
14:19
|
(19) Хрень пишешь ибо
"Обратите внимание: После процедур аутентификации и авторизации все методы API должны вызываться с использованием HTTPS протокола. Для взаимодействия по https используется ГОСТ сертификат (ГОСТ Р 34.10-2012 сертификат)." Каким местом ты заставил свои ком/оле стандартные понимать гост2012 ? |
|||
24
sergei10006
03.02.20
✎
14:36
|
(21) Как отправляются доки большого объема я знаю, я говорил что при отправки из 1С 7.7, 1С отваливается по этому я и обратился на форум, что ошибка лезет когда загружаю данные в com объект.
(19)Я для транспорта использую объект msxml2.serverxmlhttp.6.0 он 100% работает с https каналом,можешь почитать в интернете. Если хочешь могу процедуру отправки скинуть).Там вроде только сертификаты в личные и доверенные надо устанавливать! Но я тебе точно говорю прога написана и я по всем схемам 201,416,417,701,210,439 и.т.д. обмениваюсь с тестовым контуром МДЛП. |
|||
25
sergei10006
03.02.20
✎
14:38
|
(23) "Каким местом ты заставил свои ком/оле стандартные понимать гост2012 ?"
Это место "msxml2.serverxmlhttp.6.0" )))) |
|||
26
trad
03.02.20
✎
14:40
|
||||
27
Garykom
гуру
03.02.20
✎
14:45
|
(24) Тестовый контур подразумеваешь тестовый или песочницу?
|
|||
28
sergei10006
03.02.20
✎
14:46
|
(27) Песочница
|
|||
29
sergei10006
03.02.20
✎
14:48
|
(26) Спасибо сейчас попробую!
|
|||
30
sergei10006
03.02.20
✎
15:03
|
(27) А ты пробовал отправлять данные больше 2 Гб ? ошибку WinHttp не выдает ?
|
|||
31
sergei10006
03.02.20
✎
15:04
|
(30) Сори больше 2 Мб )
|
|||
32
sergei10006
03.02.20
✎
15:31
|
О чудо!!! Работает этот костыль OleExSup.dll. Огромное спасибо "trad" и разработчикам OleExSup
CDO=СоздатьОбъект("CDO.Message"); БодиПарт=CDO.BodyPart; Поля=БодиПарт.Fields; Поле=Поля.Item("urn:schemas:mailheader:content-type"); Поле.Value="text/plain; charset=""windows-1251"""; Поля.Update(); Stream = БодиПарт.GetDecodedContentStream(); Stream.charset = "windows-1251"; ЗагрузитьВнешнююКомпоненту("OleExSup.dll"); OleExSup = СоздатьОбъект("OLEExSup"); OleExSup.InvokeOLEMethod(Stream, "WriteText", стр); Stream.Flush(); БодиПарт.ContentTransferEncoding = Кодировка; Stream=БодиПарт.GetEncodedContentStream(); Возврат Stream.ReadText(); //а вот отправка в МДЛП ЗагрузитьВнешнююКомпоненту("OleExSup.dll"); OleExSup = СоздатьОбъект("OLEExSup"); OleExSup.InvokeOLEMethod(XMLHTTP, "Send", ТелоЗапроса); |
|||
33
trad
03.02.20
✎
15:52
|
(32) ТелоЗапроса - тут что? xml,json?
|
|||
34
Garykom
гуру
03.02.20
✎
15:54
|
(30) (31) У меня пока не сделаны большие, надо заняться, но у меня с промежуточным сервером нет проблем кусками из 1С отправлять
|
|||
35
sergei10006
03.02.20
✎
18:11
|
(33) Тело запроса это JSON(
СтрокиВJSON = СоздатьОбъект("Структура"); СтрокиВJSON.Вставить("document",ДокументBase64); СтрокиВJSON.Вставить("sign",ПодписьBase64); СтрокиВJSON.Вставить("request_id",СокрЛП(GUID)); ТелоЗапроса = ЗаписьJSON(СтрокиВJSON,1);) А заголовки присваиваются так XMLHTTP.SetRequestHeader(Представление,Значение); |
|||
36
sergei10006
03.02.20
✎
18:17
|
(34) А как такое возможно,скажем один документ в 40 000 тыс строк кусками отправить? подпись сертификата должна ведь быть одна на отправляемый объем данных, она каждый раз меняется.Если два набора данных отправить то это и есть два разных документа, просто с одним номером, но в МДЛП это разные документы.
|
|||
37
sergei10006
03.02.20
✎
18:25
|
(34) Я например просто попробовал отправить до 2 мб(но это все равно очень много), и получил в ответ такую ошибку.Так что дело не в webdav, а просто платформа 1с 7.7 не хочет загружать через com объекты большие объемы данных, это касается как WinHTTP так и msxml2.
|
|||
38
Garykom
гуру
03.02.20
✎
18:31
|
(36) У меня подписывает не 1С а промежуточный сервер наваянный мной на golang.
Короче 1С формирует файл и передает (как угодно в т.ч. кусками) его "mdlp.exe" который подписывает и отправляет в честный знак |
|||
39
Garykom
гуру
03.02.20
✎
18:33
|
(38)+ Все что надо 1С это уметь XML, JSON и HTTP.
Точнее не только 1С а что угодно что это умеет. Никаких криптографий из 1С не надо и даже если ЦПРТ поменяет протокол из 1С можно будет по прежнему. |
|||
40
Garykom
гуру
03.02.20
✎
18:34
|
(38)+ Плюс что один промежуточный сервер может быть поднять для множества рабочих мест в т.ч. удаленных.
Короче КриптоПро и сертификаты УКЭП не надо на все рабочие места ставить и можно держать отдельно на отдельном компе/сервер. |
|||
41
Сияющий в темноте
03.02.20
✎
18:47
|
ну не мучайте вы 1с
пишите в файл и этот файл и отправляйте,тогда к размеру претензий не будет. 1с хорошо умеет запустить приложение,к если с плюшками,то Wscript.Run |
|||
42
victuan1
04.02.20
✎
05:48
|
(8) Например у msxml2.serverxmlhttp.6.0 нет такого ограничения.
Вот смотрю на файл размером в 9 Мб, отправленный им из 1С 7.7 |
|||
43
sergei10006
04.02.20
✎
07:49
|
(42) Да ограничений на отправку фалов не, но как это воспримет МДЛП, попробую отпишусь. А как быть с остальными com объектами например вот:
oSignedData = СоздатьОбъект("CAdESCOM.CadesSignedData"); // свойства и методы для работы с усовершенствованной подписью. oSignedData.ContentEncoding = 1; oSignedData.Content = СтрокуВBase64(ТекстДляПодписи); как загрузить в "oSignedData.Content = """ текст в 2 Мб и больше? |
|||
44
sergei10006
04.02.20
✎
09:44
|
(43) Фаил отправить можно, только его МДЛП не воспринимает возвращается ответ от сервера 400(Запрос не может быть исполнен). Так что остается пока один вариант использовать "OleExSup.dll"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |