Показать сообщение отдельно
Старый 12.03.2009, 14:39   #1  
Bakai Madybaev is offline
Bakai Madybaev
Участник
 
201 / 16 (1) ++
Регистрация: 22.04.2008
! Быстродействие CrmService
Реализовали такой функционал. На основе данных из сайта в CRM создаются Интересы, Контакты, Счета и куча других кастомных объектов. Но ради безопасности не стали писать доступ к веб-сервисам CRM из самого сайта, а создали промежуточный веб-сервис на asp, который принимает SOAP запросы от сайта и с другой стороны заносит данные в CRM.

Проблема: когда приходит запрос из сайта каждый раз создается экземпляр класса CrmService - это занимает много времени (20-60 сек) и сайт, не дождавшись ответа, вываливается с TimeoutException. Но следующие затем запросы обрабатываются мгновенно -создание экземпляра класса CrmService проходит сразу. Похоже где-то что-то кэшируется. Но через пару часов (суток) снова тратится много времени на этом же шаге.

Для решения данной проблемы наткнулся на след. тему:
http://social.microsoft.com/forums/e...-d395bff00c5a/

Еще нашел полезную ссылку для сериализации WebReference:
http://uwekaessner.spaces.live.com/b...908E!175.entry

Сделал как указано в последней ссылке:
1. Сгенерировал файл с Xml-сериализацией для web-reference CrmService.
2. В Reference для классов CrmService, Request, Response, BusinessEntity закомментировал аттрибуты
Код:
[System.Xml.Serialization.XmlIncludeAttribute
и добавил аттрибут
Код:
[System.Xml.Serialization.XmlSerializerAssemblyAttribute(AssemblyName = "CrmServicePerformance.XmlSerializers")]
Итог:
Скорость при создании CrmService увеличилась.
Но на выполнение CrmService.Create(), CrmService.Execute(), CrmService.RetrieveMultiple() все равно уходит много времени. Иногда вся логика выполняется аж за 2 минуты.
Но следующие запросы могут выполняться за 2 секунды.

Что еще можно сделать?