Показать сообщение отдельно
Старый 26.06.2013, 11:36   #5  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Благодарю за глубокий ответ.

Цитата:
Сообщение от hardcore Посмотреть сообщение
Я правильно понимаю, что у вас проблема с обработкой реквестов на стороне аксапты, т.е кол-во реквестов в единицу времени не слишком большое но каждый реквест выполняется очень долго? И судя по вопросу вы готовы вкладываться в разработку которая позволит клиенту отложено понимать что запрос на сервере выполнен.
Совершенно верно. Опыт на моем компьютере показал, что доставка сообщения через все уровни абстракции занимает 30 мс, тогда как полная обработка простейшего запроса требует 2 с. Клиент требует ответ <1с.

Цитата:
Сообщение от hardcore Посмотреть сообщение
Развернуть wcf сервис над ах, развернуть wcf сервис на клиенте. Клиент вызывает сервис над ах, асинхронно (имеется ввиду стандартный для .net подход
Этого хотелось бы избежать, поскольку надстройка неминуемо скроет WSDL-описание, а клиент предъявляет высокие требования к администрированию и контролю версий схем и моделей данных. В противном случае можно сразу брать MSMQ-адаптор и не мучиться.


Цитата:
Сообщение от hardcore Посмотреть сообщение
Способ в лоб: То вы можете также вызвать клиентом сервис над ах из него запустить операцию в ах асинхронно, по завершении выполнения просто сохранять результат в сериализованнов виде например в базе. А клиент должен периодически опрашивать сервер. Минусы подхода со стороны клиента, что придется писать логику повторного забора результата.
Этот способ я пробовал с той разницей, что вызывался стандартный сервис в AX. Минус в том, что WCF-клиент все равно проходит по всем методам, и приходится сериализовывать уже де-сериализованный XML-объект, теряя производительность. Кроме того, придется менять сигнатуры и возвращаемые значения всех update-, create- и прочих методов.

Цитата:
Сообщение от hardcore Посмотреть сообщение
Клиент, делая вызов асинхронно может не ждать ответа от сервера, а продолжать исполнять код текущего потока, а ответ, который сервер обработал синхронно, приходит в другой поток клиента, после чего он становиться доступен в пользовательском обработчике. В общих чертах это можно найти здесь
Да, я догадался, что т.н. асинхронный вызов в .NET работает именно так, и это - не более чем программное ухищрение.