Артур Нуруллин: Сущности у нас меняются редко, поэтому нет. При добавлении новых — да, нужно написать еще код, хотя, учитывая, что это обычно классы с автосвойствами и атрибутами валидации, это быстро. С маппингом туда-обратно справляется AutoMapper. POCO, согласитесь, с дополнительной атрибутикой уже не совсем POCO.
Артур Нуруллин: Много — понятие относительное :) В тех проектах, над которыми я работаю, число сущностей измеряется десятками. View-моделей обычно побольше.
Андрей Ласточкин: Соглашусь с вами, кеширование MethodInfo позволяет ускориться почти в три раза. Я написал простой тест, получаются следующие результаты:
Reflection — 00:00:08.4798681
Reflection (cached) — 00:00:03.0568128
Expressions — 00:00:00.6013912
Для каждого варианта выполняется миллион итераций, в каждой вызов подряд трех методов. Для упрощения кеширования перегрузку использовать не стал, но добавить её поддержку вполне реально.
Эмм, вы написали некорректный, с точки зрения C#, код. Думаю, для начала вам стоит поучить сам язык на более простых примерах. В частности, приведенный вами метод является расширением для объекта типа System.Uri и имеет два out-параметра — десериализованный ответ и статус ответа. Даже если учесть, что методы-расширения можно вызывать, как обычные статические, вы первым аргументом подаете в него строку, которая к Uri не приводится. А про остальные два параметра вы вовсе забыли.
Вот здесь есть пример, похожий на ваш. Код там не то чтобы расчудесный, но путь решения исходной задачи поможет понять.
И да, забыл упомянуть, что нужно сохранять значение поля __VIEWSTATE каждый раз и передавать его в POST-запросе. В нем хранится и размер, и номер текущей страницы, вероятнее всего. Без него все будет печально.
Я имел в виду Windows Service, не WCF — это совсем про другое. Самый простой вариант коммуникации — через данные. Если вы в MVC не кешируете обращения к БД, изменения, внесенные другим приложением, отобразятся немедленно. Другой вариант — сделать служебный action, принимающий запросы только с localhost (можно сделать атрибут, проверяющий Request.IsLocal). И после завершения работы в консоли вы просто отправляете http-запрос на этот адрес. А если надо в обоих направлениях обмениваться сообщениями — то MSMQ в помощь, ну или любое другое подобное решение (RabbitMQ, ZeroMQ, да хоть через таблицу БД можно сделать).