В настоящее время мы проводим обзор дизайна нашей службы WCF, и одна вещь, которая беспокоит меня, - это решение между услугами Per-Call и Per-Session. Я полагаю, что понимаю концепцию, лежащую в основе обоих, но на самом деле я не вижу преимущества услуг Per-Call. Я понимаю, что мотивация для использования услуг Per-Call заключается в том, что служба WCF удерживает объект сервера только в течение срока действия вызова, тем самым ограничивая время, в течение которого экземпляр службы удерживает дорогой ресурс, но для меня его гораздо проще использовать более OO-подобная модель Per-Session, где ваш экземпляр прокси-объекта всегда соответствует одному и тому же экземпляру объекта сервера и просто обрабатывает любые дорогостоящие ресурсы вручную.
Например, скажем, у меня есть служба CRUD с методами Добавить, Обновить, Удалить, Выбрать. Это может быть сделано как услуга Per-Call с подключением к базе данных («дорогой ресурс»), созданным в конструкторе объекта сервера. С другой стороны, это может быть служба Per-Session с созданием и закрытием соединения с базой данных в каждом из представленных методов CRUD.
Для меня это не отличается в плане ресурсов, и это делает модель программирования проще, поскольку клиент может быть уверен, что у него всегда один и тот же объект сервера для своих прокси: сохраняется любое дорогостоящее состояние, которое может быть между вызовами, и для методов не требуется никаких дополнительных параметров, чтобы определить, какие данные о состоянии должны быть извлечены службой, когда она снова создает новый объект сервера (как в случае Per-Call). Это похоже на использование классов и объектов, когда применяются те же проблемы управления ресурсами, но мы не создаем новые экземпляры объектов для каждого вызова метода, который мы имеем для объекта!
Так что же мне не хватает в модели Per-Call?
Спасибо