none
WCF нагрузка от [OperationContract(AsyncPattern = True)] RRS feed

  • Вопрос

  • Здравствуйте!

    Пожалуйста объясните мне как меняется механизм работы операций на стороне WCF сервиса,

    если пометить операцию как [OperationContract(AsyncPattern = True)]

    Внутри самих операций BeginXXX помеченных таким образом, происходит исполнение запросов к БД,

    и после их исполнения происходит исполнение EndXXX что приводит к отправке отклика назад к клиенту

    Есть соблазн использовать именно такую реализацию методов сервиса, потому как я думаю что в данном

    случае освобождается поток обработки сообщений на стороне сервиса, что опять таки как мне кажется

    снизит на него нагрузку.

    В целом вопросы заключаются в следующем: возможно ли снизить нагрузку на сервер используя такую реализацию

    и что так же не маловажно, снизится ли время ожидания отклика для клиента и не увеличится ли количество

    подключение к сервису?

    Хотелось бы конечно узнать побольше и про то как меняется механизм обработки вызовов в данном случае

    Буду очень вам признателен, всех с прошедшим праздником!)

    15 сентября 2012 г. 15:59

Ответы

Все ответы

  • На самом деле асинхронность не всегда увеличивает производительность, а наоборот может ухудшить её. Как и любым инструментом, нужно уметь им пользоваться и применять его там, где это действительно необходимо. Если метод претендует на звание потенциально длинно выполняющегося(вызов другого внешнего ресурса, или внутреннего с длительным выполнением, например процедуры БД с большим количеством операций), то да, использование асинхронности улучшает общую производительность и отзывчивость приложения если приходит много запросов. Но если метод выполняется быстро, то дополнительные накладные расходы с созданием вторичного потока обслуживания, негативно влияют на производительность. Почему так: поток обслуживающий запрос освобождается для повторного обслуживания других сообщений, тем временем наша операция обрабатывается в другом, несвязанном с обработкой сообщений, потоке.
    15 сентября 2012 г. 18:42
    Модератор
  • Не согласен.

    Операции сервиса, просто делегируют их вызовы в вызовы необходимых хранимых процедур в БД.

    Асинхронные вызовы хранимых процедур используют IO Completion Ports, что в свою очередь, просто освобождает

    потоки в которых нет никакой необходимости т.к. операции использующие IO Completion Ports для исполнения

    своих задач вообще в потоках не нуждаются. Ну ведь и в правду, для чего удерживать поток, если все что нам

    требуется, это поставить в очередь запрос к БД, а по завершению их исполнения на сообщат все те же

    IO Completion Ports. Вызовы операций сервиса и их отклики тоже являются IO работой, вот отсюда то и возникает

    интерес узнать о внутреннем механизме работы WCF сервиса при AsyncPattern = true.

    21 сентября 2012 г. 11:07
  • В целом вопрос остается открытым, судя по всему пока еще не нашлось человек который бы смог объяснить что меняется внутри WCF когда метод помечается как [OperationContract(AsyncPattern = true)]. Желающие высказать поверхностное мнение не приветствуются! Вникайте пожалуйста в суть вопроса! И не пишите мне разного рода чушь, как например "Асинхронность нужна не везде" или "Если что-то потенциально претендует на длительное по времени исполнение"! Расскажите о механизме! Обращаюсь к знающим людям...

    21 сентября 2012 г. 11:12
  • Привет.

    Думаю лучшим ответом на ваш вопрос будет блог Wenlong Dong's Blog, а именно посты в нем WCF Request Throttling and Server Scalability и Scale WCF Application Better with Asynchronous Programming

    Надеюсь это прояснит работу асинхронной модели запросов.


    Для связи [mail]

    28 сентября 2012 г. 0:57
    Модератор
  • Очень вам благодарен! Отличные посты

    30 октября 2012 г. 15:33