[C#] Ищу минусы WCF

zorin29

Пишу клиент-серверную штуку, в качестве сервера выступает WCF-сервис, живущий внутри Windows-сервиса. Пока что у меня нет никаких претензий к тому, как работает сервис. Но меня смущает тот факт, что народ ругает WCF (видел ругательства тут на форуме, и еще кое-где).
Пжалуйста, напишите краткое summary, чем плох WCF.

kokoc88

Пжалуйста, напишите краткое summary, чем плох WCF.
Тебя устроил бы ответ "он плох всем, как и почти любой другой стандартный Framework от Microsoft, выпущенный после 2005 года"?

kokoc88

Навскидку...
При ошибках сериализации просто дропается соединение.
Настройки убогие. Одни и те же вещи надо настраивать как на стороне клиента, так и на стороне сервера. Смешиваются настройки из файлов и настройки аннотациями. Ежа родить проще, чем программно сконфигурировать WCF.
Для обработки исключений приходится писать обёртки, потому что WCF приемлет только своё исключение.
Можно добиться прослушивания на одном порту, но требуется отдельное соединение на каждый сервис.
Сериализация сделана убого. Если ты передаёшь объекты между сервисами, то её надо всегда перенастраивать. По умолчанию какими-то детскими значениями ограничены глубина графа сериализации, длина строки, длина пакета. А это всё может обнаружиться только у клиентов.
Очень просто запутаться и сделать непроизводительную систему. Например, может возникнуть проблема, если клиенты удерживают соединения с сервисами. Опять же, эта проблема обычно обнаруживается уже при запуске системы в тестирование или эксплуатацию.

zorin29

Спасибо. Конфигурировать, действительно, было нетривиально. Проблем с производительностью пока не находил, но еще потестирую.
Что уж там, предложи и лучший аналог :)

FRider

Что уж там, предложи и лучший аналог :)
обычный хттп, реализованный как in-proc сервер.

zorin29

Поправь меня, если я ошибаюсь, но мне кажется, что WCF - высокоуровневый фреймворк. В качестве аналога я ожидал нечто такого же высокого уровня. Ясное дело, что написать клиент-сервер можно и на обычном http, и на сокетах.

FRider

 
Поправь меня, если я ошибаюсь, но мне кажется, что WCF - высокоуровневый фреймворк.

ага, он настолько высокоуровневый, что проблемы конфигурации(крайне не очевидные в попытке их разрешить!) займут достаточное время. Выше было неплохо описано, что это за проблемы.
Конечно, выбор инструмента должен зависить от задачи. Если есть задача интеграции твоего сервиса с какой либо внешней системой, на которую ты не влияешь - это один разговор.
Если же нет, то простой хттп + стандартынй фреймворк сериализации(в первом приближении те же механизмы сериализации, предлагаемые самим .нетом) будет имхо отличным вариантом.

FRider

К описанным проблемам хочу добавить проблемы настройки безопасности.
По умолчанию она включена(виндовая авторизация). Чтобы ее отключить, нужны согласованные настройки в конфигах как клиента, так и сервера примерно в трех местах.

kokoc88

К описанным проблемам хочу добавить проблемы настройки безопасности.
Точно, и ещё можно добавить проблемы с сессиями. Я в итоге так переплевался, что сделал руками сессии с таймаутами.
В качестве альтернативы рекомендую http и сериализацию (согласен с автором выше). Для RPC предлагаю паттерны Command в сочетании с Visitor, последний можно заменить на Relfection. Как это сделать - рекомендую изучить статьи Google по GWT.

zorin29

По умолчанию она включена(виндовая авторизация). Чтобы ее отключить, нужны согласованные настройки в конфигах как клиента, так и сервера примерно в трех местах.
А я не отключал виндовую (аутентификацию? мне она даже помогла.

FRider

А я не отключал виндовую (аутентификацию? мне она даже помогла.
базара 0, это вполне возможно, но вот у нас падала когда лез доменный юзер. Фишка в том, что настройки там настолько сложны, что шаг влево шаг вправо - падение реквеста.
Оставить комментарий
Имя или ник:
Комментарий: