AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.09.2012, 18:58   #1  
spirius is offline
spirius
Участник
 
34 / 12 (1) ++
Регистрация: 27.02.2012
CrmServiceWrapper: close created TCP connection.
Доброго времени суток!

Проблемка:
Существует батч, который создает тысячи рекорд с помощью вызова CrmServiceWrapper.Create(entity). Рекорды создаются без проблем.

Но каждый вызов .Create создает TCP соединение в IIS.
При малом количестве создаваемых рекорд ничего страшного не происходит. Но когда количество рекорд сильно увеличивается ИИС останавливается. Как я понял это зависит от ограничений на: количество свободных портов, время ожидания и т.д.

вот и возникает вопрос: есть ли возможность обрывать созданное .Create TCP соединение программно?
Dispose не помог. в CrmServiceWrapper других методов не видел, подобных этому.

П.С. CrmServiceWrapper использовать необязательно - может быть у кого-нибудь есть готовое решение через другую реализвацию?

Заранее спасибо.
Старый 06.09.2012, 22:49   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Сложно сказать, я не встретил упоминание CrmServiceWrapper в SDK.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 06.09.2012, 23:57   #3  
Konstantin Katsovich is offline
Konstantin Katsovich
Участник
Аватар для Konstantin Katsovich
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
243 / 57 (2) ++++
Регистрация: 22.10.2008
Адрес: Israel
Цитата:
Сообщение от spirius Посмотреть сообщение
Доброго времени суток!

Проблемка:
Существует батч, который создает тысячи рекорд с помощью вызова CrmServiceWrapper.Create(entity). Рекорды создаются без проблем.

Но каждый вызов .Create создает TCP соединение в IIS.
При малом количестве создаваемых рекорд ничего страшного не происходит. Но когда количество рекорд сильно увеличивается ИИС останавливается. Как я понял это зависит от ограничений на: количество свободных портов, время ожидания и т.д.

вот и возникает вопрос: есть ли возможность обрывать созданное .Create TCP соединение программно?
Dispose не помог. в CrmServiceWrapper других методов не видел, подобных этому.

П.С. CrmServiceWrapper использовать необязательно - может быть у кого-нибудь есть готовое решение через другую реализвацию?

Заранее спасибо.
Смысл в том, что при открытии порта он остается открытый примерно четыре минуты поэтому вы ограничены по количеству обращений (не более 5000 портов).
Это не связано не с СРМ не с CrmServiceWrapper .
Это ограничение IIS, так сказать его дифолтные настройки.

Я знаю несколько решения этой проблемы
  1. Увеличения количества процессов в Application Pool под которым бежит СРМ.
  2. Увеличение количества портов и уменьшения время которое порт открыт. http://support.microsoft.com/kb/196271
    Оба этих я использую если есть большая нагрузка на СРМ, от пользователей (много пользователей много работают).
  3. Если проблема только ночью с какой-нибудь аппликацией которая обновляет/создает большой количества записи больше 4000.
    Можно поставить Sleep между обращениями примерно 60 миллисекунд. Смысл в том, что у вас не было больше 16 обращений в минуту.

Удачи
__________________
Читайте SDK!!!
Старый 10.09.2012, 10:09   #4  
spirius is offline
spirius
Участник
 
34 / 12 (1) ++
Регистрация: 27.02.2012
Цитата:
Сообщение от Konstantin Katsovich Посмотреть сообщение
Смысл в том, что при открытии порта он остается открытый примерно четыре минуты поэтому вы ограничены по количеству обращений (не более 5000 портов).
Это не связано не с СРМ не с CrmServiceWrapper .
Это ограничение IIS, так сказать его дифолтные настройки.

Я знаю несколько решения этой проблемы
  1. Увеличения количества процессов в Application Pool под которым бежит СРМ.
  2. Увеличение количества портов и уменьшения время которое порт открыт. http://support.microsoft.com/kb/196271
    Оба этих я использую если есть большая нагрузка на СРМ, от пользователей (много пользователей много работают).
  3. Если проблема только ночью с какой-нибудь аппликацией которая обновляет/создает большой количества записи больше 4000.
    Можно поставить Sleep между обращениями примерно 60 миллисекунд. Смысл в том, что у вас не было больше 16 обращений в минуту.

Удачи
Спасибо за дельный совет.
Ситуация улучшилась, но проблема осталась. В конечном счете ИИС всеравно зависает.

А Sleep в данном случае не является верным решением - процесс и так занимает слишком много времени. а если еще и усыплять его постоянно, он просто станет ненужным с такой работой =(
Старый 11.09.2012, 10:43   #5  
spirius is offline
spirius
Участник
 
34 / 12 (1) ++
Регистрация: 27.02.2012
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Сложно сказать, я не встретил упоминание CrmServiceWrapper в SDK.
CrmServiceWrapper это самопальный класс, который работает как CrmService.
в конструкторе класса создается экземпляр CrmService при запросе. перегрузка иис вероятнее всего происходит здесь - слишком много сервисов создается во время выполнения программы.

Я запутал всех описанием проблемы=) По итогу то нужно отлавливать ошибки в создании CrmService, а лучше настроить создание CrmService так, чтобы он создавался только при возможности подключения к серверу.
Старый 11.09.2012, 12:36   #6  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Я думаю, можно копнуть чуть глубще и использовать не готовый CrmService a основополагающие классы WCF. Возможно это позволит более гибко управлять времененм жизни и открываеммыми TCP сессиями:
X++:
String serviceUrl = "http://localhost/FixRM/XRMServices/2011/Organization.svc"
SymmetricSecurityBindingElement security = new SymmetricSecurityBindingElement(new SspiSecurityTokenParameters());
HttpTransportBindingElement http = new HttpTransportBindingElement();
CustomBinding binding = new CustomBinding();
binding.Elements.Add(security);
binding.Elements.Add(http);

OrganizationServiceClient client = new OrganizationServiceClient(binding, new EndpointAddress(serviceUrl));
Не совсем корректный пример, так как класс OrganizationServiceClient генерирован с веб реверенса при помощи студии, но идею вы, думаю, уловили.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gustafwesterlund: Finding the TCP port for Dynamic Excel Export Blog bot Dynamics CRM: Blogs 0 10.02.2012 18:11
Jim Wang: Fetch-based report, Sandbox and TCP 808 Blog bot Dynamics CRM: Blogs 0 29.09.2011 05:18
Muhammad Ali Khan: Close Service Activity On Create Message In PlugIn Blog bot Dynamics CRM: Blogs 0 19.02.2010 23:05
Leon's CRM Musings: Auto-assigning workflow-created records to the current user Blog bot Dynamics CRM: Blogs 0 05.02.2010 15:05
Dynamics CRM Tools: Tools Update : New connection control Blog bot Dynamics CRM: Blogs 0 18.11.2009 12:05

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:53.