Поэтому я хочу поставить в очередь некоторые действия, которые будут вызваны.
Немного предыстории: пытаюсь отправлять запросы, используя Webclient, но, по-видимому, он не позволяет использовать очень длинные URL-адреса (до 2000 символов), и обнаружил, что верхняя граница для этого значения в моей системе составляет около 40 элементов (точнее 43). Поэтому мне нужно разбить запросы Webclient на наборы по 40 ~, и я решил сделать это, используя Очередь.
Вот код:
public void some_method()
int num = 40; // readonly variable declared at top but put here for clarity
String hash = "";
Queue<Action> temp_actions = new Queue<Action>();
foreach (ItemViewModel item in collection)
{
num--;
hash += "&hash=" + item.Hash; // Add &hash + hash to hashif (num == 0)
{
// Change status for these 40 items
temp_actions.Enqueue(() => auth.change_status_multiple(status, hash));// Reset variables
num = 40;
hash = "";
}
}// Enqueue the last action for the rest of the items
// Since "num == 0" doesn't cater for leftovers
// ie. 50 items and 40 in first set, 10 left (which will be enqueued here)
temp_actions.Enqueue(() => auth.change_status_multiple(status, hash));// Start the change status process
temp_actions.Dequeue().Invoke();actions = temp_actions;
}public Queue<Action> actions { get; set; }
// Event handler for when change_status_multiple fires its event for finish
private void authentication_MultipleStatusChanged(object sender, EventArgs e)
{
if (actions.Count > 0) // Check if there are actions to dequeue
actions.Dequeue().Invoke();
}
Но когда дело доходит до времени выполнения, хеш будет «». Например, у меня 50 предметов, 40 будут в первом действии, затем 10 во втором, однако строка хеша для первого набора — «». Это почему? Я бы подумал, что после помещения действия в очередь оно сохранит все значения для переменных, которые я предоставил в то время.
Я отлаживал свой код и после постановки в очередь первого набора хеш-код корректен, но когда он перезагружает переменные num и hash, хэш-значение изменяется для первого набора (внутри очереди) на «».
Есть ли что-нибудь вокруг этого?
Благодарю.
Ошибка при копировании файла в W:basemybase_xxxxx.dt Системе не удается найти указанный путь.
В данном случае, в качестве конечной папки указан сетевой диск, который подключается при входе пользователя в систему. Если агент efsaver запускается как служба, он не «видит» этого диска.
Измените путь к сетевой папке к виду полного сетевого пути, например: archivbase
Ошибка при копировании файла в archivbase mybase_xxxxx.dt Системе не удается найти указанный путь.
Проблема, как правило, связана с правами пользователя на доступ к сетевой папке. Права нужно смотреть того пользователя, который используется запуска службы. Например, агент efsaver запущенный как служба с системной учетной записью SYSTEM не имеет прав на сетевые ресурсы.
При попытке запуска агента как службы появляется окно ошибки «Указанная служба не установлена» или «could not open policy».
Вероятно инсталляцию службы блокирует компонент Windows UAC (User Account Control). Запустите менеджер с повышением прав до администратора. Для этого сделайте правый клик мышкой на ярлыке менеджера и выберите пункт меню «Запустить от имени администратора».
При попытке запуска агента как служба появляется окно ошибки «Неверный дескриптор».
Возможно, вы ошиблись при заполнении поля «Пользователь». Проверьте имя пользователя, который будет использоваться для запуска службы. Вероятно, данного пользователя в системе не существует.
Восстановление пароля для доступа к «Менеджеру».
Вам необходимо прислать на почту файл с данными программы esdata.db.
Все настройки/данные программы находятся в файле esdata.db. Файл расположен по следующему пути:
Если используете Effector Saver 3
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saver 3esdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saver 3esdata.db
Если используете Effector Saver 4
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saveresdata.db
Windows 7/8, Windows server 2008/2012
C:ProgramDataEffector Saveresdata.db
Перед копированием файла остановите службу efsaver и удалите процессы через диспетчер задач (по крайней мере те, которые присутствуют)
fagent.exe
fmanager.exe
fmonitor.exe
Архивирование средствами 1С:Предприятие 7.7 ошибка «Out of memory».
Вероятно одновременно запускается более 2-х задач Архивирование средствами 1С:Предприятие 7.7. В настройках программы установите «Разрешить одновременную работу потоков задач» в значение не больше 2.
Ошибка отключения пользователей базы 1С, Библиотека не зарегистрирована
Ошибка отключения пользователей базы 1С:. Недопустимая строка с указанием класса
Ошибка отключения пользователей базы 1С, Различаются версии клиента и сервера (8.3.7.2027 — 8.3.8.2197), клиентское приложение: COM-администратор
Ошибка отключения пользователей базы 1С, Не найден указанный модуль, ProgID: «V83.ComConnector»
Как правило, появляется после установки новой версии ядра 1С:Предприятия.
Решение — зарегистрируйте на компьютере библиотеку comcntr.dll.
О том как зарегистрировать библиотеку, здесь
Ошибка отключения пользователей базы 1С, Ошибка операции администрирования Администратор кластера не аутентифицирован
Установите флаг «Кластер требует авторизации» если в кластере 1С:Предприятия создан пользователь «администратор кластера», заполните имя и пароль.
Важно: не путайте данного пользователя с пользователем базы 1С:Предприятия и пользователем «администратор центрального сервера».
В консоли сервера 1С:Предприятия администраторы кластера находятся по следующему пути: «Console Root» — «1C:Enterprise 8.3 Central Servers» — «(*)имя компьютера» — «Кластеры» — «Локальный кластер» — «Администраторы».
Could not open data connection to port xxxxx: Connection timed out.
Может происходить в задаче «Дополнительное копирование» при передаче файла на FTP сервер. Исправляется в настройке подключения к FTP серверу, установкой флага «Пассивный режим».
Задача запускается, появляется в активных задачах, но архив не создает.
Как правило, это происходит если в настройках задачи указан не верный логин или пароль пользователя подключения к 1С.
Перезапустите агент как приложение, что бы увидеть запускаемые окна 1С в контексте Вашего рабочего стола. Выполните задачу вручную. Если откроется окно авторизации 1С, значит неверный логин или пароль.
При выходе очередного релиза платформы 8.2 приходиться перевыбирать исполняемый файл на новый релиз.
В настройках каждой задачи, в поле «Исполняемый файл:» укажите вариант «1C:Предприятие 8.2 последний установленный релиз». После этого, агент efsaver будет автоматически использовать максимальный релиз 1С 8.2.
Задача завершается с ошибкой «Запрос прекращения выполнения задачи (допустимое время выполнения вышло)».
Проверьте допустимое время выполнения задачи на закладке «Завершение».
Не верно указан логин или пароль подключения к 1С. Задача «зависает» на этапе авторизации 1С все отведенное ей время. Смотрите решение «Задача запускается, появляется в активных задачах, но архив не создает».
Как обновить Effector Saver до последней версии с сохранением текущих задач и настроек?
О том как обновить Effector Saver 3, здесь
О том как обновить Effector Saver 4, здесь
О том как перейти с Effector Saver 3 до версии 4, здесь
Как перенести настройки программы на другой компьютер? Как сохранить настройки если необходимо переустановить OS?
Все настройки/данные программы находятся в файле esdata.db. Файл расположен по следующему пути:
Если используете Effector Saver 3
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saver 3esdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saver 3esdata.db
Если используете Effector Saver 4
Windows XP, Windows server 2003
C:Documents and SettingsAll UsersApplication DataEffector Saveresdata.db
Windows 7/10, Windows server 2008/2012
C:ProgramDataEffector Saveresdata.db
После установки программы на новом компьютере, замените этот файл на «старый».
Обратите внимание: версии программ, на старом компьютере и на новом, должны быть идентичны.
Если версии программ на старом компьютере и на новом разные, после замены файла настроек запустите установку программы заново (поверх) и файл настроек будет обновлен.
Возможен ли перенос Лицензии на другой компьютер?
Приобретенная Лицензия (1 копия) на программу может использоваться только на одной физической машине или в одной виртуальной среде.
Вы имеете право перенести свою Лицензию на программу на другую машину при условии, что на прежней физической машине или виртуальной среде активированная программа полностью удалена. В противном случае мы будем вынуждены отказать вам в активации. Если вам необходимо активировать несколько программ, необходимо приобрести соответствующее количество Лицензий.
После переноса Лицензии на другой компьютер, вероятно, потребуется пройти активацию программы заново.
Могут ли юридические лица пользоваться бесплатной версией программы?
Да, использование программы не запрещено лицензионным соглашением.
Как восстановить резервную копию MS SQL базы 1С?
Извлеките из архива бэкап базы.
Воспользуйтесь статьей: Восстановление резервной копии базы данных (среда SQL Server Management Studio)
Ошибка отправки e-mail «Syntactically invalid EHLO argument(s).
Имя компьютера указано кириллицей.
Зайдите в меню «Сервис» — «Параметры программы», меню «Дополнительно»
В секции «APP» в параметр
HeloName=
впишите произвольное слово используя латинские буквы (будет использоваться как идентификатор клиента при подключении к SMTP серверу вместо имени локального компьютера), например
HeloName=Effector
Ошибка Error archivator (1): error -3.
Происходит из-за того, что файл в процессе бэкапа был модифицирован. Ошибка в модуле версии программы, устранена в последних версиях Effector Saver.
Решение — обновите Effector Saver до крайнего релиза.
Ошибка отключения пользователей базы 1С, Процесс сервера не может быть запущен, так как указана неправильная идентификация. Проверьте правильность указания имени пользователя и пароля, ProgID: «V83.ComConnector» (HRESULT=8000401A)
Перейдите «Панель управления» — «Администрирование» — «Службы компонентов».
Выберите «Приложения COM+» — «V83COMConnector» — «Свойства» перейдите на вкладку «Удостоверение» и введите данные учетной записи с правами Администратора. В случае если используете домен, укажите доменную учетную запись. Подробней в материале: Решение проблемы «Недопустимая строка с указанием класса».
Ошибка! Временный файл D:TempBase_full.bak заблокирован.
Установите полный доступ пользователю службы Effector Saver на папку временных файлов.
Также ошибка возникает, в случае если задача бэкапа базы SQL еще выполняется с прошлого времени запуска. Проверить это вы можете в «Журнале задач», просмотрев время окончания прошлой задачи.
|
|||
sidalexsandr
22.03.17 — 11:47 |
EffectorSaver выдает ошибку: =========================================== Задача: UPP Вид задачи: Архивирование средствами 1С:Предприятие 8 Компьютер: 1-SRV Начало: 22.03.2017 2:00:00 Конец: 22.03.2017 2:00:09 Статус: Ошибки при выполнении задачи =========================================== 22.03.2017 2:00:00 — Поиск старшей версии 1С:Предприятия … 22.03.2017 2:00:00 — C:Program Files (x86)1cv88.3.9.2033bin1cv8.exe 22.03.2017 2:00:00 — Выгрузка информационной базы … Ошибка исключительной блокировки информационной базы. Активные сеансы и соединения: компьютер: 1-SRV, пользователь: Остякова Алёна, сеанс: 5, начат: 21.03.2017 в 17:12:28, приложение: Толстый клиент; компьютер: 1-SRV, пользователь: Бабков Сергей, сеанс: 8, начат: 21.03.2017 в 17:34:36, приложение: Толстый клиент 22.03.2017 2:00:09 — Ошибка! Выгрузка информационной базы не выполнена Вопросы: 1) в чем ошибка 2) как исправить ошибку |
||
drcrasher
1 — 22.03.17 — 11:49 |
пятница вроде послезавтра |
||
Джо-джо
2 — 22.03.17 — 11:50 |
1)Ошибка исключительной блокировки информационной базы. Активные сеансы и соединения: компьютер: 1-SRV, пользователь: Остякова Алёна, сеанс: 5, начат: 21.03.2017 в 17:12:28, приложение: Толстый клиент; компьютер: 1-SRV, пользователь: Бабков Сергей, сеанс: 8, начат: 21.03.2017 в 17:34:36, приложение: Толстый клиент 2) Выгнать юзеров(закрыть сеансы) |
||
AleksandrM09
3 — 22.03.17 — 11:53 |
Я так понимаю файловая база. Сделайте батник или укажите что перед копированием выполнять — taskkill /im 1cv8* /f wait 10 А еще лучше научите сотрудников правильно завершать работу на терминальном сервере. |
||
AleksandrM09
4 — 22.03.17 — 11:56 |
P.S. Если у вас все же серверная база, то в настройках задания есть возможность настроить завершение сеансов пользователей 1С. Но повторюсь, лучше расскажите Алёне и Сергею что из-за их забывчивости не снимается корректно копия и в случае чп, вы придете к ним с паяльником. |
||
sidalexsandr
5 — 22.03.17 — 11:56 |
(2) Раньше программа EffectorSaver автоматически выгоняла юзеров перед снятием копии. |
||
1Снеговик
6 — 22.03.17 — 11:58 |
Файловая УПП, почему бы и нет |
||
sidalexsandr
7 — 22.03.17 — 12:13 |
Что из настроек EffectorSaver выбрать и чем они отличаются, вот настройки: 1) завершить сеансы на сервере 1с Предприятие 2) вызвать штатное завершение работы пользователей ? |
||
AleksandrM09 8 — 22.03.17 — 12:16 |
(7) http://efsaver.ru/docs/help/call-procedurs-1c8/call-procedurs-1c8-disconnect-user.html |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
1 |
|
1C 8.x 24.01.2019, 08:45. Показов 2293. Ответов 35
Доброго дня всем. Прошу знающих дать рекомендации, что предпринять в данной ситуации. 0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
24.01.2019, 08:45 |
Ответы с готовыми решениями: «Exiland Backup» – ошибка перезаписи файла backup Раньше пользовался программой «TurboBackup 9», он умел делать backup в… Backup Need Backup Backup в 1С 35 |
434 / 305 / 92 Регистрация: 28.05.2014 Сообщений: 1,247 |
|
25.01.2019, 09:24 |
21 |
Внесу ещё 5 своих копеек по поводу копирования и бэкапов С начало приведу рекомендации от самой 1с Файловый вариант информационной базы Создание резервной копии в клиент-серверном варианте Выгрузка информационной базы данных в файл Если вкратце про файловые базы, то фирма 1с рекомендует в качестве бэкапа делать копии CD файлов, вместе с файлом логов,НО перед началом копирования не должно быть ни одного соединения с базой, даже конфигуратор необходимо закрыть, т.к. можем получить неактуальную информацию, или просто битую базу. Добавлено через 1 минуту 1 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 12:30 [ТС] |
22 |
НО перед началом копирования не должно быть ни одного соединения с базой, даже конфигуратор необходимо закрыть, т.к. можем получить неактуальную информацию, или просто битую базу. вооот. абсолютно с Вами согласен. Почему и настраиваю все дела по ночам. Просто встал вопрос — как выгнать имеющихся клиентов из БД. Нашел вышеописанную прогу. Протестил — работает. Соответственно, все настроил и сплю спокойно. 0 |
206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
|
25.01.2019, 13:00 |
23 |
1. Сделать копию. 1 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 13:06 [ТС] |
24 |
1. Сделать копию. сегодня вечером попробуем. Отпишусь…. 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 18:48 [ТС] |
25 |
1) Скопировал полностью каталог рабочей БД на системный SSD Кликните здесь для просмотра всего текста а, собственно значение 111 506 345 122 байт прочитано…. это что, 111 Гигов? Откуда? 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 19:00 [ТС] |
26 |
так. Появился таки результат. Кликните здесь для просмотра всего текста 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 19:25 [ТС] |
27 |
Во блин! Кликните здесь для просмотра всего текста это как понимать? Первый раз запустил без галочки на исправление, утилита показала, что есть проблемы, поставил галочку Исправлять…. итог — нет ошибок! Как это понимать? Исправилось само? Или утилита исправила записи, но листинг исправлений не выдаёт? 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
25.01.2019, 19:40 [ТС] |
28 |
Зашел в конфигуратор, запустил выгрузку… через примерно минут 15 база выгрузилась. 0 |
Модератор 3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
26.01.2019, 03:00 |
29 |
romsan, воткни пока батник в планировщик заданий на копирование фала .cd 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
26.01.2019, 07:15 [ТС] |
30 |
Effector saver отработал норм. (ТИ заняло 1:10 времени, выгрузка — 5 минут)
воткни пока батник в планировщик заданий на копирование фала .cd Т.е. настроить через effector saver Завершение работы пользователей средствами 1С, а потом robocopy кидать в др. каталог ТОЛЬКО 1Сv8.1cd ? Дублирующий BackUp ? 0 |
Модератор 3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
29.01.2019, 00:02 |
31 |
Т.е. настроить через effector saver Завершение работы пользователей средствами 1С А зачем делать завершение работы пользователей?
robocopy кидать в др. каталог ТОЛЬКО 1Сv8.1cd ? Дублирующий BackUp ? Пока не разберешься что случилось с БД, просто копируй файл 1Сv8.1cd. 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
29.01.2019, 08:12 [ТС] |
32 |
А зачем делать завершение работы пользователей? ну как зачем!? Вон, выше чел написал же опасения:
Если вкратце про файловые базы, то фирма 1с рекомендует в качестве бэкапа делать копии CD файлов, вместе с файлом логов, НО перед началом копирования не должно быть ни одного соединения с базой, даже конфигуратор необходимо закрыть, т.к. можем получить неактуальную информацию, или просто битую базу. Сейчас у меня всё норм с базой. Продолжается выполнение ТиИ БД, потом выгрузка *.dt, потом планировщиком монтируется внешний диск (шара на ПК2), переноситься сформированная *.dt на тот ПК. Отсутствие файла сигнализируется на мыло. Шара размонтировывается), и, на том ПК2 еще стоит Handy Backup, который запускает синхронизацию с облаком. 0 |
Модератор 3697 / 2897 / 569 Регистрация: 10.03.2011 Сообщений: 11,398 Записей в блоге: 1 |
|
30.01.2019, 02:44 |
33 |
romsan, 10 лет копирую — полет нормальный… Если подзадуматься, то как выполняется копирование… Пока транзакция не завершена, ОС Windows приостанавливает копирование до окончания транзакции (файловая база состоит из множества вложенных файлов, как скопировать папку, пока в какие-то файлы идет запись, эти файлы не копируются Нам ОС предлагает повторить операцию, так и тут только без вопросов) Добавлено через 10 минут 1 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
30.01.2019, 08:10 [ТС] |
34 |
БОЛЬШАЯ вероятность получить ОШИБКУ при разворачивании бакапа из dt файла (на практике — очень частая), хоть и не часто, я бы сказал, даже редко, но восстановление БД из *.dt никогда не вызывало проблем. Во всяком случае за мои 3 года контроля за данной БД. Но, приму к сведению, Ваши рекомендации. Наваять *.bat-ник с командами копирования и в cron его запихнуть на выполнение перед выгрузкой *.dt (хотя можно и в самом Effector Saver это прописать) труда не составит. 0 |
206 / 180 / 31 Регистрация: 24.10.2011 Сообщений: 738 |
|
30.01.2019, 11:02 |
35 |
Я бы рекомендовал после chdbfl прогнать тестирование через конфигуратор ибо выдыхать полностью еще рано. 0 |
4550 / 1998 / 424 Регистрация: 17.10.2015 Сообщений: 8,637 |
|
30.01.2019, 11:33 [ТС] |
36 |
Я бы рекомендовал после chdbfl прогнать тестирование через конфигуратор это сделано в первую же ночь. Кликните здесь для просмотра всего текста 0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
30.01.2019, 11:33 |
Помогаю со студенческими работами здесь backup системы Сегодня делал бекап системы, но почему-то он закончился неудачно. Backup Windows 7 Backup MSSQL Backup Сайта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 36 |
Effector Saver – данное программное обеспечение представляет собой технически сложную и высокоинтеллектуальную программу, которая специализируется на резервном копировании информационных баз 1С. Так же скопировать можно будет сведения Microsoft SQL, данные Предприятия/BAS, произвольные папки и файлы, PostgreSQL.
Вся программная деятельность софта построена на архивировании и шифровки бэкапов, которые в последующем сохраняются на удаленные FTP-сервера, либо в облако. При этом автоматически производится удаление устаревших бэкапов, и параллельно отправляется технический отчет на электронную почту.
Отдельно стоит сказать о наличии встроенного планировщика заданий, который ведет схему обо всех активных процессах. Так же имеется и подробное ведение журнала работы, где точно фиксируются все действия со стороны программы и пользователя.
Преимущества ПО:
- Высокотехнологичная платформа для резервного копирования информационных баз данных;
- Широкая поддержка различных БД;
- Технология автоматического удаления старых бэкапов;
- Размещение информации в облаке или на FTP-серверах;
- Встроенный планировщик для контроля выполнения заданий;
Скачать архив с программой можно ниже, совершенно бесплатно:
Пароль на доступ к скачиванию и архивам «pcprog» без кавычек.
Подробности смотрите в разделе ЧАВО.
Effector Saver 4.8.2.rar48.23 MB
Чтобы скачать файл скопируйте пароль «pcprog» вставьте его в поле «Password» и нажмите на значок загрузки.
Статус: Ошибки при выполнении задачи
===========================================
7/2/2019 1:00:00 AM — Резервное копирование MSSQL базы «ut» …
7/2/2019 1:00:00 AM — SQL Server version 14
7/2/2019 1:00:01 AM — BACKUP DATABASE is terminating abnormally.
A nonrecoverable I/O error occurred on file «C:WindowsTempes_2588.tmp.bak:» 112(Недостаточно места на диске.).
7/2/2019 1:00:01 AM — Ошибка! Резервное копирование базы не выполнено
На диске C: действительно недостаточно свободного места для создания резервной копии базы 1С. Но само резервное копирование настроено на другой диск G:. Тем не менее, временные файлы система пытается создать именно на диске C:.
Как оказалось, данная ошибка исправляется очень просто.
В параметрах программы нужно изменить каталог временных файлов (меню: Сервис — Параметры программы — Параметры агента).
При попытке оплаты данным плагино возникает ошибка «Некоторые параметры счета некорректны Неверный параметр: Signature «
Я написал в поддержку робокассы, вот их ответ:
«Данная ошибка возникает только на стороне магазина. Проверять необходимо скрипт, отвечающий за инициализацию оплаты, а именно, ту часть, что формирует Signature по формуле, состоящей из переменных. Самые распространенные неточности, из-за которых может неверно считаться MD5:
- Используется некорректный Идентификатор магазина;
- Используется некорректный Пароль 1 (MerchantPass1);
- Используются дополнительные пользовательские параметры (shp), которые добавлены в программный код кассы, но не занесены в формулу подсчета или наоборот, в формуле подсчета указаны, в коде их нет.
С уважением, ROBOKASSA. «
Я перепроверил все пароли (пароли соответствуют критериям сложности робокассы), проверил идентификатор магазина, проверил URls — все указано корректно. Пытался переустановить плагин. Ничего не помогает. Лог плагина пустой.
Что можно попробовать еще?
Спасибо!
Среда — Delphi XE2 Enterprise.
Относится к использованию dispInterface в Delphi без classid. Повторная публикация как другой вопрос, поскольку я вышел далеко за рамки предыдущих проблем (благодаря @EricBrown) и теперь имею более конкретную проблему.
У меня есть .NET dll с COM-интерфейсом, который я зарегистрировал на компьютере и импортировал как библиотеку типов в Delphi. Я использую файл tlb.pas, созданный Delphi.
Работая с парой dispInterfaces, которые я реализовал в интерфейсах IDispatch и дочерних классах TAutoIntf, я успешно инициализировал классы и интерфейсы, которые мне нужны для вызова методов в COM-интерфейсе библиотеки .NET. Вот код, иллюстрирующий объявление / реализацию:
// COM Event Sink GUID
DIID_IResponseListener: TGUID = '{ABC29F08-B628-4747-BA9E-469D408E57B9}';
// *********************************************************************//
// DispIntf: IResponseListener
// Flags: (4096) Dispatchable
// GUID: {ABC29F08-B628-4747-BA9E-469D408E57B9}
// *********************************************************************//
IResponseListener = dispinterface
['{ABC29F08-B628-4747-BA9E-469D408E57B9}']
procedure RequestCompleted(const requestID: WideString; const responseObj: IResponse); dispid 1610744833;
procedure RequestFailed(const requestID: WideString; const error: WideString); dispid 1610744834;
procedure TablesUpdates(const responseObj: IResponse); dispid 1610744835;
end;
...my implementation:
IFXResponseListener = interface(IDispatch)
['{3204D3F7-5DF2-4470-89D5-D34F4F6F0381}']
procedure RequestCompleted(const requestID: WideString; const responseObj: IResponse); dispid 1610744833; safecall;
procedure RequestFailed(const requestID: WideString; const error: WideString); dispid 1610744834; safecall;
procedure TablesUpdates(const responseObj: IResponse); dispid 1610744835; safecall;
end;
TFXResponseListener = class(TAutoIntfObject,IFXResponseListener)
private
FDisp: IDispatch;
FResp: IResponse;
function GetResponseListIntf: IResponseListener;
public
constructor Create;
destructor Destroy;
published
procedure RequestCompleted(const requestID: WideString; const responseObj: IResponse); safecall;
procedure RequestFailed(const requestID: WideString; const error: WideString); safecall;
procedure TablesUpdates(const responseObj: IResponse); safecall;
property ResponseObj: IResponse read FResp;
property ListenerDispIntf: IResponseListener read GetResponseListIntf;
end;
...
{ TFXResponseListener }
constructor TFXResponseListener.Create;
var
TypeLib: ITypeLib;
begin
OleCheck(LoadRegTypeLib(LIBID_fxcore2_com,fxcore2_comMajorVersion,fxcore2_comMinorVersion,0,TypeLib));
inherited Create(TypeLib,DIID_IResponseListener);
end;
destructor TFXResponseListener.Destroy;
begin
inherited;
end;
function TFXResponseListener.GetResponseListIntf: IResponseListener;
begin
FDisp := Self as IFXResponseListener;
FDisp._AddRef;
Result := IResponseListener(FDisp);
end;
procedure TFXResponseListener.RequestCompleted(const requestID: WideString; const responseObj: IResponse);
begin
showmessage('Completed: ' + requestID);
FResp := responseObj;
end;
procedure TFXResponseListener.RequestFailed(const requestID: WideString; const error: WideString);
begin
showmessage('Failed: ' + requestID);
end;
procedure TFXResponseListener.TablesUpdates(const responseObj: IResponse);
begin
showmessage('TablesUpdates');
end;
Вот где я пытаюсь использовать интерфейс:
FRespList := TFXResponseListener.Create;
try
FSess.subscribeResponse(FRespList.ListenerDispIntf);
except
// errors out here with 'The parameter is incorrect'
end;
Отслеживая это в недрах System.Win.ComObj, в строке 1793 он вызывает:
Status := Dispatch.Invoke(DispID, GUID_NULL, 0, InvKind, DispParams, Result, @ExcepInfo, nil);
На данный момент параметр DispID действителен (1610743816), GUID_NULL равен ‘(0, 0, 0, (0, 0, 0, 0, 0, 0, 0, 0))’, InvKind равен ‘1’, DispParams равно ‘($ 2152FE8, nil, 1, 0)’, результат: ‘$ 12FE24’, @ExcepInfo — ‘$ 12FDE0’.
В System.pas, строка 30133, TInterfacedObject.QueryInterface вызывается дважды. При втором запуске он возвращает результат «E_NOINTERFACE», и появляется ужасное сообщение «Параметр неверен».
Я действительно не уверен, что делать дальше, но я надеюсь, что эксперт по COM и / или Delphi может просмотреть это и увидеть что-то неладное.
Мне также интересно, есть ли версия .NET framework или другая проблема. Я использую фреймворк версии 4.5.1; Не знаю, как определить, является ли сборка .NET кошерной с этой версией фреймворка или ей действительно нужна более ранняя версия.
Приветствуются любые соответствующие методы отладки .NET / COM.
Также обратите внимание: я могу продублировать эту проблему с другим классом-потомком dispinterface / IDispatch / TAutoIntfObj и аналогичным вызовом, идентичным ‘T’.
Спасибо.
1 ответ
Лучший ответ
Похоже, этот в сумке. Благодаря @EricBrown и @RemyLebeau мне удалось заставить это работать.
Предложение Реми об изменении экземпляра FRespList с:
var
FRespList: TFXResponseListener;
Чтобы :
var
FRespList: IFXResponseListener;
… сделали свое дело. Итак, когда я создаю экземпляр, используя
FRespList := TFXResponseListener.Create;
… Я получаю правильный результат, и все жирно, тупо и весело.
Также мне нужно указать, что GUID, назначенный диспетчерскому интерфейсу, должен использоваться для созданного мной потомка интерфейса IDispatch, в противном случае мы вернемся к «Параметр неверен.». Интересно, задокументировано ли это где-нибудь …
Также немного странно, когда я закончил со своим потомком IDispatch, я обнулял его. Это уменьшает количество ссылок для потомка TAutoIntfObject до 2 . Что приводит к утечке памяти. Я тестировал и пробовал разные вещи, чтобы получить этот refcount для dec, наконец, мне пришлось сделать некоторые странности:
**procedure** TMyClass.Destroy; // <- changed from **destructor** TMyClass.Destroy;
begin
inherited Destroy; // <- had to call this first!
// then...
while Self.RefCount > 0 do
IUnknown(Self)._Release;
end;
… а затем вызовите MyClassInstance.Destroy; чтобы освободить класс без утечек AV и памяти.
Если кто-нибудь знает, почему у меня было 3 ссылки на мой класс, почему FreeAndNil (MyClassInstance) и IMyClass: = Nil; оставляет refcount 2 с нарушением доступа и / или утечкой памяти, почему мне пришлось сначала уничтожить унаследованное, почему мне пришлось привести класс к типу IUnknown и вручную освободить экземпляры, пожалуйста, сообщите.
В другой паре интерфейс / класс я все еще получаю утечку памяти от TServerEventDispatch. Это один из классов, автоматически созданных Delphi в файле tlb.pas. Если у кого-то есть предложение …
КОМ … тебе это должно понравиться!
Я хотел бы дать какие-то очки и Эрику Брауну, и Реми Лебо, но я не знаю как.
Итак … СПАСИБО, РЕБЯТА!
0
DeCoder
13 Фев 2014 в 08:07