Silverlight - Как обрабатывать вложенные .ExecuteAsync с помощью DevForce

У меня есть ситуация, показанная ниже, которая дает мне ошибку и выглядит как тайм-аут. Отсутствует какая-то вставка записей. ошибка, как показано ниже:

IdeaBlade.EntityModel.AsyncProcessor1.<>c__DisplayClass2.<.ctor>b__0(TArgs args) at IdeaBlade.EntityModel.AsyncProcessor1.Signal () в IdeaBlade.EntityModel.AsyncProcessor`1.b__5 (Object x)

InnerException: [HttpRequestTimedOutWithoutDetail] Аргументы: строки ресурсов отладки недоступны. Часто ключ и аргументы предоставляют достаточно информации для диагностики проблемы. См. http://go.microsoft.com/fwlink/?linkid=106663&Version=5.0.10411.00&File=System.ServiceModel.dll&Key=HttpRequestTimedOutWithoutDetail

в IdeaBlade.EntityModel.EntityServerProxy. ‹> c_ DisplayClass14.b _13 () в IdeaBlade.EntityModel.EntityServerProxy.ExecFunc [T] (Func1 func, Boolean funcWillHandleException) at IdeaBlade.EntityModel.EntityServerProxy.ExecuteOnServer[T](Func1 func, Boolean funcWillHandleModel.Exception. SessionBundle sessionBundle, ITypeWrapper entityManagerType, String typeName, String methodName, Object [] args) в IdeaBlade.EntityModel.EntityMa

Любая идея, как с этим справиться? Спасибо:)

              ......
            .ExecuteAsync(op =>
            {
                var cust =Customers.Where(p => p.IsSelected).ToList();

                           ..........................

                   Ships.ForEach(.......
                              ...........
                        EntityManager.SalesGetSalesQuery(
                         ..............
                        .ExecuteAsync(opn =>
                        {

                                 ................

                                                        });

                    p.UpdateOrders(copyOrders);


                    Orders.Add(copyOrders);


                Save();
            });

person peter prova    schedule 30.01.2013    source источник


Ответы (3)


Тайм-аут может произойти в нескольких местах, поэтому вам нужно увеличить все возможные значения тайм-аута.

В этом случае вам следует подумать об увеличении времени запроса (CommandTimeout и Transaction), связи и IIS executionTimeout.

У DevForce есть страница документации, на которой рассказывается о тайм-аутах устранения неполадок. Это на http://drc.ideablade.com/devforce-2012/bin/view/Documentation/understand-timeouts.

Я заметил, что ваш вложенный запрос («SalesGetSalesQuery») - это StoredProcQuery. Существует нерешенная ошибка, при которой StoredProcQueries не учитывает значение тайм-аута транзакции, если оно отличается от значения по умолчанию. (120 секунд) Мы работаем над исправлением, но, к сожалению, пока нет обходного пути.

Если время ожидания истекает не для StoredProcQuery, то приведенная выше ссылка поможет вам решить эту проблему.

person sbelini    schedule 02.02.2013
comment
Thx sbelini, да, как вы видите, это вложенный Async, внутренний я вызываю хранимую процедуру внутри цикла. Я пробовал разные сценарии, чтобы обойти проблему, например, увеличение SendTimeout в файлах конфигурации и ....... чего он не сделал Работа. - person peter prova; 04.02.2013
comment
Есть другой подход? - person peter prova; 04.02.2013

Задача №1 - увеличить период ожидания, пока вы выясняете, что занимает так много времени.

Это поможет https://stackoverflow.com/questions/4877315/silverlight-4-ria-services-timeout-issuesestive

person Silver Solver    schedule 30.01.2013
comment
Спасибо, но я не использую какие-либо службы, просто обращаясь к объекту (клиенту), есть ли способ увеличить время ожидания? - person peter prova; 31.01.2013
comment
Вы пользуетесь сервисом, хотя, без сомнения, он был создан. Ответ на вопрос об увеличении тайм-аута находится в связанной публикации. Где-то будет класс, производный от DomainService, просто выполните текстовый поиск, и вы его найдете. - person Silver Solver; 31.01.2013
comment
Я нашел его в web.config и app.config, и я изменил оба на sendTimeout = 00: 10: 00, все равно время ожидания истекает :( - person peter prova; 31.01.2013

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

Какой асинхронный вызов истекает точно по тайм-ауту? Это StoredProcQuery? (любой из них, поскольку вы вызываете их в цикле) Если да, то это серьезная ошибка, над исправлением которой мы работаем. Как я уже упоминал в предыдущем посте, обходного пути нет. Однако, поскольку этот конкретный storedProc принимает диапазон дат в качестве аргументов, одной из возможностей было бы «разбить» этот диапазон дат на меньшие диапазоны дат и выпустить несколько асинхронных вызовов. (возможно, в параллельной сопрограмме) Не то, чтобы этот «обходной путь» не является доказательством отказа, поскольку все заказы могут находиться в периоде небольшого диапазона, и асинхронный вызов для этого конкретного диапазона все равно будет тайм-аутом.

сбелини.

person sbelini    schedule 04.02.2013
comment
Один вопрос: это сообщение на стороне клиента? Потому что я поставил Try -catch, и он проигнорировал мой try-catch - person peter prova; 06.02.2013