Благодарю за глубокий ответ.
Цитата:
Сообщение от
hardcore
Я правильно понимаю, что у вас проблема с обработкой реквестов на стороне аксапты, т.е кол-во реквестов в единицу времени не слишком большое но каждый реквест выполняется очень долго? И судя по вопросу вы готовы вкладываться в разработку которая позволит клиенту отложено понимать что запрос на сервере выполнен.
Совершенно верно. Опыт на моем компьютере показал, что доставка сообщения через все уровни абстракции занимает 30 мс, тогда как полная обработка простейшего запроса требует 2 с. Клиент требует ответ <1с.
Цитата:
Сообщение от
hardcore
Развернуть wcf сервис над ах, развернуть wcf сервис на клиенте. Клиент вызывает сервис над ах, асинхронно (имеется ввиду стандартный для .net
подход
Этого хотелось бы избежать, поскольку надстройка неминуемо скроет WSDL-описание, а клиент предъявляет высокие требования к администрированию и контролю версий схем и моделей данных. В противном случае можно сразу брать MSMQ-адаптор и не мучиться.
Цитата:
Сообщение от
hardcore
Способ в лоб: То вы можете также вызвать клиентом сервис над ах из него запустить операцию в ах асинхронно, по завершении выполнения просто сохранять результат в сериализованнов виде например в базе. А клиент должен периодически опрашивать сервер. Минусы подхода со стороны клиента, что придется писать логику повторного забора результата.
Этот способ я пробовал с той разницей, что вызывался стандартный сервис в AX. Минус в том, что WCF-клиент все равно проходит по всем методам, и приходится сериализовывать уже де-сериализованный XML-объект, теряя производительность. Кроме того, придется менять сигнатуры и возвращаемые значения всех update-, create- и прочих методов.
Цитата:
Сообщение от
hardcore
Клиент, делая вызов асинхронно может не ждать ответа от сервера, а продолжать исполнять код текущего потока, а ответ, который сервер обработал синхронно, приходит в другой поток клиента, после чего он становиться доступен в пользовательском обработчике. В общих чертах это можно найти
здесь
Да, я догадался, что т.н. асинхронный вызов в .NET работает именно так, и это - не более чем программное ухищрение.