Обычно я бы сказал, WCF для любого вида размещенной службы, но в конкретном случае для служб RESTful, использующих JSON в качестве механизма сериализации, я предпочитаю ASP.NET MVC (который я буду называть ASP.NET для остальной части этого ответа).
Одна из первых причин - механизм маршрутизации. В WCF вы должны определить это в контракте, что все хорошо, но если вам нужно быстро внести изменения в свою маршрутизацию, с моей точки зрения, сделать это гораздо проще, используя механизм маршрутизации в ASP. NET.
Кроме того, к вышесказанному, если у вас есть несколько сервисов, предоставляемых через несколько интерфейсов в WCF, трудно получить полное изображение вашей структуры URL (что важно), тогда как в ASP.NET вы (как правило) маршрутных назначений в одном месте.
Второе, что есть в ASP.NET, это то, что у вас будет доступ ко всем внутренним объектам, которыми ASP.NET известен (Запрос, Ответ, Сервер и т. Д.), Что необходимо при предоставлении HTTP Конкретная конечная точка (это то, что вы создаете). Конечно, вы можете использовать многие из тех же самых вещей в WCF, но вы должны специально сообщить WCF, что вы делаете это, а затем разработать свои услуги с учетом этого.
Наконец, благодаря личному опыту, я обнаружил, что DataContractJsonSerializer
не слишком хорошо обрабатывает значения DateTimeOffset
, и это тип, который вы должны использовать над DateTime
при работе с услугой (через любую конечную точку), которую могут вызывать люди в нескольких часовых поясах. В ASP.NET есть другой сериализатор, который вы можете использовать, или, если хотите, вы можете создать свой собственный ActionResult
, который использует собственный сериализатор для вас. Я лично предпочитаю сериализатор JSON.Net .
Одна из приятных вещей в сериализаторе JSON.Net и ASP.NET, которая мне нравится, заключается в том, что вы можете использовать анонимные типы с ним, если вы умны. Если вы создаете статический универсальный метод для неуниверсального типа, который затем делегирует внутреннему универсальному типу, вы можете использовать вывод типов, чтобы легко использовать анонимные типы для ваших сериализованных возвращаемых значений (конечно, при условии, что они одноразовые, если вы иметь структуру, которая возвращается последовательно, вы должны определить ее и использовать).
Следует также отметить, что вам не нужно полностью сбрасывать со счетов WCF при разработке сервиса RESTful. Если вы выталкиваете ATOM или RSS-канал из своего сервиса, то классы в System.ServiceModel.Syndication
пространстве имен массив помогают в создании и сериализации этих каналов. Создать простой подкласс класса ActionResult
для получения экземпляра SyndicationFeed
и затем сериализовать его в выходной поток при выполнении ActionResult
довольно просто.