12.12.2012, 09:22 | #1 |
Участник
|
Плавающая ошибка при выполнении консольного приложения
Доброе время суток уважаемые форумчане. Обращаюсь к Вам с такой проблемой. Раз в сутки выполняется консольное приложение, которое обновляет данные в CRM (2011). Код примерно такой:
X++: ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; Uri uri = new Uri("http://localhost:5555/rbrcrm/XRMServices/2011/Organization.svc"); OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null); // This statement is required to enable early-bound type support. proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); IOrganizationService service = (IOrganizationService)proxy; ... Entity vCon = new Entity("contact"); ... service.Update(vCon); ... Приложение обычно выполняется около 3х часов. Примерно в 70% программа вылетает с ошибкой, спустя значительное время после выполнения, на строке service.Update(vCon); Причем, судя по логам, программа пытается выполнить эту строчку минут 30-40, потом выходит сообщение об ошибке: X++: System.ServiceModel.Security.MessageSecurityException: . . . ---> System.ServiceModel.FaultException: . . --- --- Server stack trace: System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) Microsoft.Xrm.Sdk.IOrganizationService.Update(Entity entity) Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.UpdateCore(Entity entity) Прошу помощи в решении проблемы. |
|
12.12.2012, 10:28 | #2 |
Консультант-джедай
|
Встречался давно с такой ошибкой. еще в 4 помоему. Если мне не изменяет память она была связана с большим количеством запросов выполняемых за одну "сессию" (или что-то вроде того). Решалась либо таймаутом после ~1000 запросов, либо прекращением работы программы после ~1000 запросов.
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
12.12.2012, 10:37 | #3 |
Участник
|
А что при этом пишется в трейс CRM?
|
|
12.12.2012, 10:46 | #4 |
Участник
|
|
|
12.12.2012, 10:48 | #5 |
Участник
|
Цитата:
Сообщение от slivka_83
Встречался давно с такой ошибкой. еще в 4 помоему. Если мне не изменяет память она была связана с большим количеством запросов выполняемых за одну "сессию" (или что-то вроде того). Решалась либо таймаутом после ~1000 запросов, либо прекращением работы программы после ~1000 запросов.
|
|
12.12.2012, 12:27 | #6 |
Участник
|
Цитата:
Сообщение от ma-lex
Доброе время суток уважаемые форумчане. Обращаюсь к Вам с такой проблемой. Раз в сутки выполняется консольное приложение, которое обновляет данные в CRM (2011). Код примерно такой:
X++: ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; Uri uri = new Uri("http://localhost:5555/rbrcrm/XRMServices/2011/Organization.svc"); OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null); // This statement is required to enable early-bound type support. proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); IOrganizationService service = (IOrganizationService)proxy; ... Entity vCon = new Entity("contact"); ... service.Update(vCon); ... Приложение обычно выполняется около 3х часов. Примерно в 70% программа вылетает с ошибкой, спустя значительное время после выполнения, на строке service.Update(vCon); Причем, судя по логам, программа пытается выполнить эту строчку минут 30-40, потом выходит сообщение об ошибке: X++: System.ServiceModel.Security.MessageSecurityException: . . . ---> System.ServiceModel.FaultException: . . --- --- Server stack trace: System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Exception rethrown at [0]: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) Microsoft.Xrm.Sdk.IOrganizationService.Update(Entity entity) Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy.UpdateCore(Entity entity) Прошу помощи в решении проблемы. Для начала вам нужно посмотреть внутреннее исключение как написано в сообщение. От неё и надо отталкиваться. У меня тоже появляется похожая ошибка, в Windows Services. Код: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail. Server stack trace: at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.ProcessReply(Message reply, SecurityProtocolCorrelationState correlationState, TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) Код: Inner Exception: The security context token is expired or is not valid. The message was not processed. В трайсе CRM я ни чего не нашел на эту тему. Судя по стэк трейсу эта ошибка возникает еще до попадания в CRM. (то есть в .net) Опытных путем было установлено, что у меня это происходит только в том случае, если я начинаю использовать больше одного процесса в App Pool. Когда ставишь один процесс ошибка пропадает. так и живу пока. Так же мной было опробовано два решения, но для меня безрезультатно. http://rajeevpentyala.wordpress.com/...local_machine/ http://pragmatismismymethodology.blo...exception.html Удачи.
__________________
Читайте SDK!!! |
|
12.12.2012, 12:40 | #7 |
Заноза в заднице
|
Вопрос по проблеме: от чего зависит количество шагов цикла, в котором выполняется Update? У нас была схожая ошибка и нам удалось установить зависимость количества шагов от появления ошибки.
На самом деле, есть зависимость объема передаваемых данных за одну сессию: чем меньше атрибутов обновлялось в ходе Update, тем больше шагов цикла проходило. Решение проблемы могло быть такое: все записи, которые надо апдейтить, были выгружены в массив и при проходе по массиву задавалось некое значение количества апдейтов, после которого происходило отключение сессии веб-сервиса и подключение вновь, после чего цикл возобновлялся с того элемента, на котором произошла остановка.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
12.12.2012, 12:45 | #8 |
Участник
|
Цитата:
Сообщение от Likefire
Вопрос по проблеме: от чего зависит количество шагов цикла, в котором выполняется Update? У нас была схожая ошибка и нам удалось установить зависимость количества шагов от появления ошибки.
На самом деле, есть зависимость объема передаваемых данных за одну сессию: чем меньше атрибутов обновлялось в ходе Update, тем больше шагов цикла проходило. Решение проблемы могло быть такое: все записи, которые надо апдейтить, были выгружены в массив и при проходе по массиву задавалось некое значение количества апдейтов, после которого происходило отключение сессии веб-сервиса и подключение вновь, после чего цикл возобновлялся с того элемента, на котором произошла остановка.
__________________
Читайте SDK!!! |
|
12.12.2012, 12:50 | #9 |
Участник
|
Konstantin Katsovich,
Да, внутреннее исключение именно такое. Попробую App Pool и решения по ссылкам. Не нашел каким образом менять параметр negotiateServiceCredential. |
|
12.12.2012, 12:56 | #10 |
Участник
|
Цитата:
Сообщение от Likefire
Вопрос по проблеме: от чего зависит количество шагов цикла, в котором выполняется Update? У нас была схожая ошибка и нам удалось установить зависимость количества шагов от появления ошибки.
На самом деле, есть зависимость объема передаваемых данных за одну сессию: чем меньше атрибутов обновлялось в ходе Update, тем больше шагов цикла проходило. Решение проблемы могло быть такое: все записи, которые надо апдейтить, были выгружены в массив и при проходе по массиву задавалось некое значение количества апдейтов, после которого происходило отключение сессии веб-сервиса и подключение вновь, после чего цикл возобновлялся с того элемента, на котором произошла остановка. |
|
12.12.2012, 13:07 | #11 |
Участник
|
Цитата:
Я так и не до проверил это решение. по причине не нахождения в сервисе CRM этого проперти. Оно существует только в WSHttpBinding, а CRM используется CustomBindings. Если что-то накопаете буду рад.
__________________
Читайте SDK!!! |
|
29.01.2013, 09:22 | #12 |
Участник
|
Цитата:
Сообщение от Konstantin Katsovich
Вспомнил
Я так и не до проверил это решение. по причине не нахождения в сервисе CRM этого проперти. Оно существует только в WSHttpBinding, а CRM используется CustomBindings. Если что-то накопаете буду рад. X++: public void CheckAuth() { if (DateTime.Compare(DateTime.Now, consoleStartTime.AddMinutes(counter * 7)) > 0) { _serviceProxy.Authenticate(); counter++; } } В итоге, моё консольное приложение отваливается в среднем один раз в месяц.
__________________
CRM 5.0 |
|
|
|