|
|
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Столкнулся с проблемой выхода из которой пока не вижу. Нужно было орагизовать доступ к 1С 8.1 через веб-сервисы. Начал с того что начал использовать родные веб-сервисы. Работают они прекрасно, только через какое-то время приложение с сервисами виснет и никаких ошибок в событиях. Нашел только след в логе веб-узла (2010-09-08 06:22:17 W3SVC1960811011 127.0.0.1 POST /ws1.1cws - 83 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+MS+Web+Services+Client+Protocol+2.0.50727.3053) 500 0 0) То бишь получается ошибка 500. но она может быть от чего угодно. Плюнул значит я на это дело и решил организовать свой веб-сервис. Забирать данные через COM Код одного из методов веб-сервиса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. Дополнительные методы адаптора Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Написал консольное приложение для тестирования скорости доступа через веб-сервис Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Результат 5-7 секунд.. Очень плохой, все тормозит. Через родные веб сервисы все мои 7 методов выдают 2 секунды!!!! И вот стою я значит посреди всего этого дела и непонятно куда двигаться. Куда ни ткни везде затык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 11:00 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Kipetcoff, 1) WSСоединение <> ComСоединение 2) Если сервис падает значит проблема в коде, юзаем сервисы 1С-е и работают по 6-7 месяцев бесперебойно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 15:22 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
1. Первого выражения вообще не понял.. WS это веб-сервис? Я может не совсем понятно описал. Мне нужны веб сервисы для выбора данных из 1С..использовал сначала родные. Потом написал свои веб-серсисы, которые использовали COM объекты и в этом случае я не использвал стандартные. 2.Я верю что использование стандартных веб-сервисов работоспособно и сейчас я как раз занмиаюсь поиском ошибок в коде методов 1С. Но пока результаты весьма странные. Одни и те же методы с одинаковыми параметрами то выполняются, то приводят к зависанию. Час через каждые 10 секунд дергаю все методы и нормально. Потом могу остановить. Запустить снова и зависает. Причем явные ошибки в методе не приводят к зависанию веб-сервисов,просто возвращается ошибка. Так что это что-то совсем глубоко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 15:46 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Kipetcoff, "Родные" веб сервисы подключатся через 'WS-соединение'(так оно показывается в активных пользователя разве нет?), спец облегченный режим реализованный на уровне платформы, к тому же в 8.1 модуль сервиса выполняется в привилегированном режиме. И это не одно и тоже что ComСоединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:36 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
KipetcoffПричем явные ошибки в методе не приводят к зависанию веб-сервисов,просто возвращается ошибка. Так что это что-то совсем глубоко. Речь не о явных ошибках, а о утечках памяти, которая может вызыватся зависшими ссылками и следовательно сессиями WS-соединения. Вообще надо смотреть код, режим его вызова(частота, объем данных), и настройки wsconnectionpool.xml в каталоге 1С. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:46 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Kipetcoff Общие рекомендации по сервисам могут быть таковыми 1) минимизировать модуль сеанса, оставив заполнение только тех параметров которые вам нужны в работе сервиса. 2) размещать логику метода не в общих модулях, а обработках, позволяя платформе явно удалять внутренние объекты. по след схеме: Функция МетодСервиса(Параметры) Обработка = СоздатьОбработку(); XDTOРезультат = Обработка.МетодСервиса(Параметры); Обработка = Неопределено; Возврат XDTOРезультат; КонецФункции 3) Спроектировать интерфейс сервиса для "удаленного доступа"(Remote Facade). В идеале должен быть один/два вызова сервера для решения типичной задачи клиента. 4) Оптимизировать режим обмена, если у вас много клиентов, рассмотреть возможность асинхронного обмена и обратного вызова(не клиенты дергают сервис каждый 10 сек, а сервис тогда когда на нем появятся новые данные) 5) кэширование и т.п ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:03 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
СлучайныйГостьKipetcoffПричем явные ошибки в методе не приводят к зависанию веб-сервисов,просто возвращается ошибка. Так что это что-то совсем глубоко. Речь не о явных ошибках, а о утечках памяти, которая может вызыватся зависшими ссылками и следовательно сессиями WS-соединения. Вообще надо смотреть код, режим его вызова(частота, объем данных), и настройки wsconnectionpool.xml в каталоге 1С. можно просто сервак периодически перезагружать ... да и еще может от чего поможет... утечки памяти действительно всегда были и есть... у себя ставил перезагрузку каждую ночь, хотя можно и пореже наверное... не очень красиво, но помогало... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:04 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Почитал тут и да, в описании написано что веб-сервисы используют WS соединение. Я не обратил внимение отображается ли оно в подключениях. Я понимаю что это не одно и тоже что COMConnection. Просто я пробовал и так и так подступиться к данным. Быстрее получается через стандартные веб-сервисы... Нашел файлик конфигурации wsconnectionpool.xml.. там одна строка Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:12 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Kipetcoff, 1) Убрать запись в лог через файлы - фу---------- 2) Разработчику почитать про XDTO, стандартный механизм описания входных/выходным параметров в Веб-сервисах 1С. И про то как их сериализовать в/из строки. 3) Вместо " Результат=Запрос.Выполнить().Выбрать();" делать Результат=Запрос.Выполнить().Выгрузить(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:21 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
СлучайныйГостьKipetcoff, 1) Убрать запись в лог через файлы - фу---------- 2) Разработчику почитать про XDTO, стандартный механизм описания входных/выходным параметров в Веб-сервисах 1С. И про то как их сериализовать в/из строки. 3) Вместо " Результат=Запрос.Выполнить().Выбрать();" делать Результат=Запрос.Выполнить().Выгрузить(); абсолютно СлучайныйГостьKipetcoff, 3) Вместо " Результат=Запрос.Выполнить().Выбрать();" делать Результат=Запрос.Выполнить().Выгрузить(); это ни к чему, так ты в ТЗ выгрузишь - лишняя потеря времени... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:29 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
a_titeev, Если мы обходим выборку для поиска и на каком то этапе прекратим обход, то метод "Выбрать" доктор прописал. Но если наша задача получить данные и все полностью перевести в другой формат, то нет нужны тратить время на порционное получение данных. Локальный цикл отработает быстрее чем постоянное подкачивание данных. Кроме того мы может сразу удалить запрос/закрыть соединение с БД после получения выборки, а не после обхода результатов. Исключение получение больших таблиц(многие миллионы строк), которым могут сьесть память целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 17:38 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Вот за такую конструкцию работы с логами я бы йаца оторвал. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. сделал по другому в вашем случае это работает нерационально Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 20:22 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
СлучайныйГость Общие рекомендации по сервисам могут быть таковыми 1) минимизировать модуль сеанса, оставив заполнение только тех параметров которые вам нужны в работе сервиса. 2) размещать логику метода не в общих модулях, а обработках, позволяя платформе явно удалять внутренние объекты. по след схеме: Функция МетодСервиса(Параметры) Обработка = СоздатьОбработку(); XDTOРезультат = Обработка.МетодСервиса(Параметры); Обработка = Неопределено; Возврат XDTOРезультат; КонецФункции 3) Спроектировать интерфейс сервиса для "удаленного доступа"(Remote Facade). В идеале должен быть один/два вызова сервера для решения типичной задачи клиента. 4) Оптимизировать режим обмена, если у вас много клиентов, рассмотреть возможность асинхронного обмена и обратного вызова(не клиенты дергают сервис каждый 10 сек, а сервис тогда когда на нем появятся новые данные) 5) кэширование и т.п Ваш ответ больше всего меня озадачил. Пришлось с каждым пунктом разбираться. 1. Я так понял что этот пункт требует поковырять конфигурацию 1С. Это в моем случае крайне нежелательно. Вообще стараюсь сделать так чтобы 1С трогать как можно меньше. 2. Спасибо за предложение!! Это завтра попробуем и про XDTO почитаем. 3. Долго думал,потом погуглил и в общих чертах понял что за Remote Facade. Я пока борюсь с работоспособностью сервисов, понятно что доступ к данным нужно грамотно обернуть и придется грамотно использовать кеширование,но это ещё впереди. 4. Это вообще туго пошло. Вы имеете ввиду веб-сервис или виндовый сервис? Какой обратный вызов откуда куда? Есть веб-сервис,есть потребитель информации от веб-сервиса. Как можно инициировать обратный обмен? LeoligovВот за такую конструкцию работы с логами я бы йаца оторвал. )))По поводу записил в логи.. Точно оценить ужас не могу.. Я не особо в 1С разбираюсь. Спасибо за пример. Эта запись в лог ведется исключительно на время тестов,но думаю правильность тоже будет на пользу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 22:58 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Kipetcoff, 1) Модуль сеанса выполняется при подключении, в типовых конфах там может инициироватся пара десятков переменных, нужным для обычного пользовательского режима. Так что речь прежде всего о скорости подключения к сервису. 4) Клиент не обязан быть только настольным, можно развернуть клиентский веб-сервис и зарегистрировать параметры подключения на главном. После чего при необходимости обмена главный сервис вызывает подписчиков и они запускают сторонние крипты или если клиент другая 1С, то выполняется ее модуль сервиса. Актуально при наличии множества клиентов которые иначе будут периодически опрашивать сервис ожидая новых данных. "Подписчик-потребитель" или принцип Голливуда "Не звоните нам, мы сами вам перезвоним". -- Файлы вообще не нужны. Подключения/отключения к сервису видны в журнале 1С. Туда же писать и нужную инфу. При необходимости он выгружается в XML и дальше как угодно обрабатывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2010, 10:15 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Перенесли всю логику из сервисов в обработку, перенес веб-сервис на 2008 Server теперь работает стабильно,не зависает. Но на 2003 сервере даже с переносом в обработку все равно время от времени виснет. Так что улучшения связаны с изменением среды выполнения. Здается мне что или сервер плохо настроен или все таки код его валит все время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2010, 17:04 |
|
||
|
Интеграция с 1С 8.1
|
|||
|---|---|---|---|
|
#18+
Коллеги, хочу попросить вас поделиться методикой настройки 2003 Server для веб-сервисов 1С. Я настраивал все согласно описанию Этому опустил только настройки к хранилищу. Потому как я уже взял другую машину 2003 server и на ней так же виснет сервис после ошибки 500. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2010, 11:13 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36836650&tid=1522018]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 467ms |

| 0 / 0 |
