QuickBooks SDK, использующий Perl, работает в командной консоли, а не как CGI? - PullRequest
0 голосов
/ 08 сентября 2010

Я использую метод QBXML для связи с QuickBooks на локальном компьютере (не удаленно, не используя веб-коннектор).

У меня есть очень простой скрипт, который просто подключается к QuickBooks и проверяет, есть лиКлиент существует или нет.Сценарий отлично работает при запуске через командную консоль (Windows XP), но тот же точный сценарий, без изменений, не работает при запуске в качестве CGI.

При запуске в качестве CGI сценарий не получаетXML-ответ от QuickBooks.Все остальное, кажется, работает точно так же - просто не получен XML-ответ от QuickBooks.

Вчера вечером я бился головой о стену в течение 2 часов, пытаясь выяснить это ... безуспешно.

Ответы [ 4 ]

2 голосов
/ 08 сентября 2010

В общем, когда что-то работает в командной строке, но не в другой среде, это означает, что вы пропустили переменные среды или у вас проблема с разрешениями.

Вы можете диагностировать переменные среды, сказав

#!/usr/bin/perl

print "Content-type: text/plain\n\n"
print "$_ => $ENV{$_}\n" for keys %ENV;

как в командной строке, так и через CGI.

0 голосов
/ 16 сентября 2010

Пол, оказалось, что с Abyss возникла та же проблема, я думал, что при первоначальной установке он работал как служба.При перезагрузке та же проблема, что и у Apache.В любом случае, я также заметил большую нестабильность при внесении изменений в файл QB, когда QB не был запущен и файл не был открыт.Не самая лучшая настройка, но на данный момент самое важное - то, над чем я работал, наконец, без странного поведения или ошибок.Итак, вывод таков:

  • Если вы выполняете QB SDK через веб-сервисы, по крайней мере, если веб-сервер работает в той же системе, что и QB, веб-сервер должен запускаться изкоманда (как консольное приложение), а не служба.

  • Лучше не разрешать встроенному приложению вносить изменения в файлы QB, когда они закрыты и QB не запущен.Это более раздражает, но сейчас я просто пойду с тем, что работает.

  • Я пока пропущу обходной путь DCOM, не знакомый с этим через Perl.

Хотелось бы, чтобы обработка QB была быстрее.На нетбуке с тактовой частотой 1,6 ГГц для тестирования требуется от 6 до 20 секунд, чтобы выполнить минимальную обработку.Тем не менее, скорость, полученная от возможности автоматизировать загрузку материалов, компенсирует медленную обработку.

0 голосов
/ 15 сентября 2010

Соединения QuickBooks на рабочем столе SDK отклоняются при вызове из службы.Это преднамеренное ограничение, наложенное интуитивно, но причины никогда не были раскрыты, насколько мне известно.Приложение должно запускаться в контексте интерактивного пользователя, вошедшего в систему, чтобы установить соединение.Я не уверен, почему веб-сервер Abyss работал, работает ли он под учетной записью, связанной с логином и взаимодействующим с ним?

Раньше было возможно открыть соединение SDK из службы, но ограничение учетной записи выглядело нескольколет назад без фанфар или объяснений.Существует способ обойти эту проблему: вы можете использовать DCOM, чтобы запустить запросчик SDK как отдельный процесс, а затем использовать конфигурацию DCOM, чтобы назначить соответствующую учетную запись процессу DCOM.Подробную информацию о том, как это сделать, можно найти в документации по SDK и на форумах Intuit.

0 голосов
/ 09 сентября 2010

Оказывается, что это был не код или среда, похоже, что для этой конкретной ситуации (QB SDK, OLE / XML) была возможность получить XML-ответ из QuickBooks при запуске под Apache в качестве службы. , Apache, работающий через консоль, работал. Конечно, это не работает, так как мне нужно, чтобы он работал как служба, поэтому вместо этого я буду использовать Abyss Web Server, на котором он работал нормально.

...