Микрософт, что же ты делаешь, прекрати
Sep. 23rd, 2013 08:41 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Два дня долблюсь в WCF, чтобы понять, как сунуть в RESTful сервис всякие хитрые способы аутентификации - примерно в стиле "проверяем откуда пришел запрос, проверяем хидеры-куки-итд, и либо аутентифицируем по ним, либо инициируем digest или ntlm аутентификацию".
Вывод, который я сделал пару лет назад насчет WCF, не изменился - over-engineered индусятина, с безумной архитектурой и безумным кодом (вплоть до полной бессмыслицы).
При этом, внезапно, микрософт сделал deprecated WCF REST starter kit, в котором был перехват запросов на уровне канала, до превращения их в Message. Сейчас из подходящего остались IDispatchMessageInspector, но там толком нельзя сделать что-то вроде "проверить запрос и не пустить сообщение дальше, а вернуть 401".
И микрософт выкатила еще одно творчество на эту тему - ASP.NET Web API: http://msdn.microsoft.com/en-us/library/hh833994%28v=vs.108%29.aspx
Еще в процессе посмотрел два фреймворка для веб-сервисов и веб-приложений - https://github.com/ServiceStack/ServiceStack и https://github.com/NancyFx/Nancy . У обоих есть вариации на тему "хостинг в своем приложении", "хостинг поверх WCF", "Хостинг в IIS".
Причем, WCF хостинг на самом деле является многослойной пиздецомой поверх того же базового HttpListener который используется в "своем хостинге". В WCF поверх него накручена асинхроннная обработка запросов, фоновые потоки с чем-то вроде IO Completion Ports. Рефлектором это дело посмотрел - понять, какой из вариантов принципиально лучше и какой в этом вообще смысл, сходу не получилось.
В общем, по сравнению с jetty, сервлетами, кложурью и рубе с рельсами - это безумный жопный индусский недокументированный ад.
Вывод, который я сделал пару лет назад насчет WCF, не изменился - over-engineered индусятина, с безумной архитектурой и безумным кодом (вплоть до полной бессмыслицы).
При этом, внезапно, микрософт сделал deprecated WCF REST starter kit, в котором был перехват запросов на уровне канала, до превращения их в Message. Сейчас из подходящего остались IDispatchMessageInspector, но там толком нельзя сделать что-то вроде "проверить запрос и не пустить сообщение дальше, а вернуть 401".
И микрософт выкатила еще одно творчество на эту тему - ASP.NET Web API: http://msdn.microsoft.com/en-us/library/hh833994%28v=vs.108%29.aspx
Еще в процессе посмотрел два фреймворка для веб-сервисов и веб-приложений - https://github.com/ServiceStack/ServiceStack и https://github.com/NancyFx/Nancy . У обоих есть вариации на тему "хостинг в своем приложении", "хостинг поверх WCF", "Хостинг в IIS".
Причем, WCF хостинг на самом деле является многослойной пиздецомой поверх того же базового HttpListener который используется в "своем хостинге". В WCF поверх него накручена асинхроннная обработка запросов, фоновые потоки с чем-то вроде IO Completion Ports. Рефлектором это дело посмотрел - понять, какой из вариантов принципиально лучше и какой в этом вообще смысл, сходу не получилось.
В общем, по сравнению с jetty, сервлетами, кложурью и рубе с рельсами - это безумный жопный индусский недокументированный ад.
no subject
Date: 2013-09-23 05:59 pm (UTC)no subject
Date: 2013-09-23 06:08 pm (UTC)no subject
Date: 2013-09-23 06:13 pm (UTC)no subject
Date: 2013-09-23 06:21 pm (UTC)no subject
Date: 2013-09-23 06:26 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-09-23 07:04 pm (UTC)no subject
Date: 2013-09-23 06:15 pm (UTC)На практике - чудовищное говно, пригодное только для работающих из коробки примеров вида "Сервис по сложению A+B".
Там конфигурируется практически все, но что в коде, что в app.config это выглядит как чудовищный ад.
no subject
Date: 2013-09-23 06:30 pm (UTC)no subject
Date: 2013-09-23 06:51 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2013-09-24 01:32 pm (UTC) - Expandno subject
Date: 2013-09-23 06:10 pm (UTC)Подозреваю, на практике шаг влево-вправо от стандартных процедур означает либо полную неработоспособность, либо еблю с отладкой исходного кода.
Здоровая пачка примеров из книжки на тот момент не работала. То есть книжка была с реальностью плохо синхронизирована.
no subject
Date: 2013-09-23 06:12 pm (UTC)no subject
Date: 2013-09-23 06:12 pm (UTC)ентерпрайзныйёбнутый. Любое вмешательство (кастомная аутентификация, хидеры, сжатие, ...) - это целые поляконопликлассов-врапперов, которым надо писать руками. Если смотреть сверху и на поверпоинтовые презентации - охуенно, как только подходишь поближе - начинаешь ощущать запах говна от экрана. Не люблю WCF.no subject
Date: 2013-09-23 06:19 pm (UTC)no subject
Date: 2013-09-23 08:15 pm (UTC)no subject
Date: 2013-09-23 08:27 pm (UTC)no subject
Date: 2013-09-23 10:13 pm (UTC)Только скопление алкогольных паров могло породить это богомерзкое поделие с черепашьей скоростью,гнусными отступами и противной рассудку динамической типизацией !
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-09-23 06:28 pm (UTC)no subject
Date: 2013-09-23 06:32 pm (UTC)WCF и HttpListener сам по себе умеют это. И второй практически предоставляет те же фичи что IHttpHandler.
no subject
Date: 2013-09-23 06:33 pm (UTC)no subject
Date: 2013-09-23 06:54 pm (UTC)Т.е. я хочу сделать типа: "если есть токен - пускаем анонимно, если есть клиентский сертификат - пускаем по нему, если ничего нет - требуем Digest" и прочее такое.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-09-23 07:31 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: (Anonymous) - Date: 2013-09-24 01:37 pm (UTC) - Expand(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-09-23 07:00 pm (UTC)no subject
Date: 2013-09-23 07:20 pm (UTC)no subject
Date: 2013-09-24 07:02 am (UTC)Я считаю, что во внешней конфигурации следует писать такие вещи, как номера портов, биндинги к интерфейсам, ну может вариации протоколов, какие-то форматы. То, что может возникнуть желание изменить в процессе работы приложения на месте.
Но не трехэтажные связки специализированных обработчиков и т.п. Безумие.
no subject
Date: 2013-09-25 09:44 pm (UTC)