06.09.2012, 18:58 | #1 |
Участник
|
CrmServiceWrapper: close created TCP connection.
Доброго времени суток!
Проблемка: Существует батч, который создает тысячи рекорд с помощью вызова CrmServiceWrapper.Create(entity). Рекорды создаются без проблем. Но каждый вызов .Create создает TCP соединение в IIS. При малом количестве создаваемых рекорд ничего страшного не происходит. Но когда количество рекорд сильно увеличивается ИИС останавливается. Как я понял это зависит от ограничений на: количество свободных портов, время ожидания и т.д. вот и возникает вопрос: есть ли возможность обрывать созданное .Create TCP соединение программно? Dispose не помог. в CrmServiceWrapper других методов не видел, подобных этому. П.С. CrmServiceWrapper использовать необязательно - может быть у кого-нибудь есть готовое решение через другую реализвацию? Заранее спасибо. |
|
06.09.2012, 22:49 | #2 |
Moderator
|
Сложно сказать, я не встретил упоминание CrmServiceWrapper в SDK.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
06.09.2012, 23:57 | #3 |
Участник
|
Цитата:
Сообщение от spirius
Доброго времени суток!
Проблемка: Существует батч, который создает тысячи рекорд с помощью вызова CrmServiceWrapper.Create(entity). Рекорды создаются без проблем. Но каждый вызов .Create создает TCP соединение в IIS. При малом количестве создаваемых рекорд ничего страшного не происходит. Но когда количество рекорд сильно увеличивается ИИС останавливается. Как я понял это зависит от ограничений на: количество свободных портов, время ожидания и т.д. вот и возникает вопрос: есть ли возможность обрывать созданное .Create TCP соединение программно? Dispose не помог. в CrmServiceWrapper других методов не видел, подобных этому. П.С. CrmServiceWrapper использовать необязательно - может быть у кого-нибудь есть готовое решение через другую реализвацию? Заранее спасибо. Это не связано не с СРМ не с CrmServiceWrapper . Это ограничение IIS, так сказать его дифолтные настройки. Я знаю несколько решения этой проблемы
Удачи
__________________
Читайте SDK!!! |
|
10.09.2012, 10:09 | #4 |
Участник
|
Цитата:
Сообщение от Konstantin Katsovich
Смысл в том, что при открытии порта он остается открытый примерно четыре минуты поэтому вы ограничены по количеству обращений (не более 5000 портов).
Это не связано не с СРМ не с CrmServiceWrapper . Это ограничение IIS, так сказать его дифолтные настройки. Я знаю несколько решения этой проблемы
Удачи Ситуация улучшилась, но проблема осталась. В конечном счете ИИС всеравно зависает. А Sleep в данном случае не является верным решением - процесс и так занимает слишком много времени. а если еще и усыплять его постоянно, он просто станет ненужным с такой работой =( |
|
11.09.2012, 10:43 | #5 |
Участник
|
Цитата:
в конструкторе класса создается экземпляр CrmService при запросе. перегрузка иис вероятнее всего происходит здесь - слишком много сервисов создается во время выполнения программы. Я запутал всех описанием проблемы=) По итогу то нужно отлавливать ошибки в создании CrmService, а лучше настроить создание CrmService так, чтобы он создавался только при возможности подключения к серверу. |
|
11.09.2012, 12:36 | #6 |
Moderator
|
Я думаю, можно копнуть чуть глубще и использовать не готовый 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));
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
|