metaclass: (Default)
[personal profile] metaclass
Два дня долблюсь в 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, сервлетами, кложурью и рубе с рельсами - это безумный жопный индусский недокументированный ад.

Date: 2013-09-23 06:28 pm (UTC)
From: [identity profile] enternet.livejournal.com
А оно тебе надо? IHttpHandler/IHttpAsyncHandler вполне достаточно для программирования под IIS не имея никакой нужды в кастомной реализации IO Completion Ports. Ну и аутентификацию лучше на него же переложить. А Web API, кстати, вполне нечего так на фоне остальных.

Date: 2013-09-23 06:32 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Мне нужно отдельное приложение-сервис, слушающее совместно с IIS на 80 порту.
WCF и HttpListener сам по себе умеют это. И второй практически предоставляет те же фичи что IHttpHandler.

Date: 2013-09-23 06:33 pm (UTC)
From: [identity profile] w00dy.livejournal.com
что мешает написать web-приложение/сайт и пусть оно крутится под iis-ом?

Date: 2013-09-23 06:54 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В iis не совсем прямые способы реализации аутентификации тоже.
Т.е. я хочу сделать типа: "если есть токен - пускаем анонимно, если есть клиентский сертификат - пускаем по нему, если ничего нет - требуем Digest" и прочее такое.

Date: 2013-09-23 07:02 pm (UTC)
From: [identity profile] w00dy.livejournal.com
не нравится auth в iis, сделайте свою. Там всё просто, модульно и всё в том же духе. Плюс всегда можно реализовать всё что угодно у себя в коде. Кстати, вот как ты написал, у меня так веб сайт работает. Для мобильных девайсов есть урл с токеном, дальше идёт ntlm auth для тех кто в офисе сидит, а для тех кто не желает ntlm фолбеком (нажал esc на браузерной форме ввода логина/пароля) отрабатывает forms auth.

Date: 2013-09-24 10:19 am (UTC)
From: [identity profile] bydl0coder.livejournal.com
Ну так выпили FormsAuthentication и чо там еще в стандартном ASP.NET стеке и вставь свой не хэндлер, а этот, как его, IHttpModule.

Date: 2013-09-24 10:32 am (UTC)
From: [identity profile] metaclass.livejournal.com
Это уже сделано и давно работает. Но некоторые заморочки так не лечатся.

Date: 2013-09-23 06:55 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А, еще я вообще не желаю ни ставить ни настраивать iis.

Date: 2013-09-23 06:58 pm (UTC)
From: [identity profile] w00dy.livejournal.com
возьмите xps из mono. Когда мне нужно было ходить из флеша к своей службе то я так и сделал. SOAP флеш поддерживает нативно.

Date: 2013-09-23 07:31 pm (UTC)
From: [identity profile] enternet.livejournal.com
IHttpHandler - это по прямое взаимодействие с IIS, в отличие от остальных. Это по сути единственный способ для написания нагруженных приложений - безо всякой шелухи.

Date: 2013-09-23 07:59 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
не единственный. есть проще

Date: 2013-09-23 08:04 pm (UTC)
From: [identity profile] enternet.livejournal.com
Пример в студию ) Куда-ж проще-то?

Date: 2013-09-23 08:29 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
для начала сносим винду.

Date: 2013-09-23 08:38 pm (UTC)
From: [identity profile] w00dy.livejournal.com
это не патриотично

Date: 2013-09-23 09:00 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
а что, винда белорусского производства? ниигит?

Date: 2013-09-24 07:51 am (UTC)
From: [identity profile] enternet.livejournal.com
И чё дальше? Говносайты на, прости господи, руби/питоне? Это не серьезно. Я имею дела с крупными или государственными предприятиями - там на входе предупреждают "только мс или оракл".

Буду писать говносайты - буду писать на том же говне, что и все вокруг. А пока мне и с мс забот хватает.

Date: 2013-09-24 08:34 am (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
а то ты не говносайты пишешь? с серьезным лицом, ога.
вон слоник на c++ пишет и хорошо себя чувствует.
впрочем и на рельсах можно делать сайты с 2Krps и больше (видел, учавствовал).

ну и это, ни крупные ни государственные предприятия на винде не зациклились. я знаю

Date: 2013-09-24 08:38 am (UTC)
From: [identity profile] enternet.livejournal.com
Нет не говносайты ) Аналитика для энергорынков. Уникально. Серьезно. На наши предложения открываются двери крупнейших предприятий. Кто знает, может и в Кремль на совещание позовут.

Date: 2013-09-24 01:37 pm (UTC)
From: (Anonymous)
Видели мы такую аналитику. Жабагадюки везде и лежит часами... Сплошной Оракл и железо по словам руководства самое топовое в мире. В итоге я выкачиваю plain data в PostgreSQL и считаю за минуты, то, что Oracle считает часами. Считаю на Lenovo Desktop i3 с 4Gb памяти....

(no subject)

From: [identity profile] enternet.livejournal.com - Date: 2013-09-24 03:49 pm (UTC) - Expand

Date: 2013-09-24 08:52 am (UTC)
From: [identity profile] stdray.livejournal.com
А можно краткий экскурс, чем так сильно хорош IIS? То есть в сравнении с тем же HttpListener откуда возьмется большая разница в производительности?

Date: 2013-09-24 10:21 am (UTC)
From: [identity profile] enternet.livejournal.com
Эээ... Не знаю что и сказать. Нуу, скажем так, технически-то они оба поверх http.sys работают. Поэтому и ежу понятно, что при грамотной работе с HttpListener производительность будет идентична. Просто мне лично не нравится изобретение велосипедов. Работа с IIS проста и не очень понятно зачем тратить время на самостоятельное изобретение всей той обвязки которая, собственно, и является современным веб-сервером. Например. Несколько лет назад я как-то с утра решил написать собственный comet(?)-сервер, не помню зачем. Ну и начал приблизительно с того же, что и метакласс: потыкал палкой уже написанное, почитал про чужие наработки, сделал пару демок из чужого кода. Ну и пришел ровно к тому же выводу: это же песец какой-то. А потом сделал себе демо на IHttpHandler/IHttpAsyncHandler, потюнил, смотрю 40Krps на моей дохлой машинке как с куста и коннектов тыщи длинных. И так всё элементарно и кода мало, что пожалел, что потратил время на изучение чужих велосипедов.

IIS сервер достаточно простой, чего его боятся - непонятно. Не хуже других.

Date: 2013-09-24 12:18 pm (UTC)
From: [identity profile] stdray.livejournal.com
Я, прочитав сообщение, подумал, что остальные варианты сильно проигрывают в производительности IHttpHandler. У меня нет претензий к IIS, на работе его и использую. Просто мне непонятно, почему для дотнетов по сути есть один единственный веб-сервер существует.
А иногда желательно сделать веб-приложение на дотнетах с минимумом инфраструктурных зависимостей. А тут кроме этих self-host нанси и сервисстэка ничего и нет. А потом я смотрел какие-то такие бенчмарки , где непонятно: или тесты кривые, или фреймворки настолько медленные или моно настолько убогое, или комбинации перечисленного. Ну и решил уточнить на всякий случай про фатальные недостатки, поскольку я как раз собираюсь велосипедов пописать.

>А потом сделал себе демо на IHttpHandler/IHttpAsyncHandler, потюнил, смотрю 40Krps на моей дохлой машинке как с куста и коннектов тыщи длинных.
Это можно где-то посмотреть самообразования ради?

Date: 2013-09-24 01:29 pm (UTC)
From: [identity profile] enternet.livejournal.com
Удивительно, но нашел кусок старого кода по комету. Помидорами не кидать! Код академический ) https://gist.github.com/enternet/6684188

Не помню каким тестом там было 40Krps. Это же комет, ему кол-во соединений важно, а не rps. Кол-во соединений там судя по комментариям было в диапазоне 10-20K. Но центральная суть в коде, что для соединений, что для rps одна и та же - аккуратная работа с IHttpAsyncHandler и IAsyncResult. И именно для этого дела кода нужно очень мало. Код по очередям/потокам/синхронизации/json можешь не смотреть: это просто старый трешак - всё уже готовое есть в последнем C# и dotNet.

Date: 2013-09-24 01:30 pm (UTC)
From: [identity profile] enternet.livejournal.com
Метакласс, открой личико комментарий. А то он в подозрительные попал.

Date: 2013-09-24 03:25 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Открыл.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 23rd, 2025 03:36 am
Powered by Dreamwidth Studios