Ответы пользователя по тегу WCF
  • Зачем нужны WCF?

    И да и нет. Тоже для обмена данными между приложениями, но не обязательно с использованием REST-архитектуры.

    WCF он больше про классические веб-сервисы на базе XML и SOAP. Хоть в WCF и есть возможность создания HTTP REST сервисов, сложно сказать что WCF под них заточен.

    В основном этот фреймворк ориентирован на разработку приложений на базе группы стандартов WS-*, например таких как WSDL, WS-Addressing и WS-Security. Это объёмные стандарты, написанные для обеспечения взаимодействия классических веб-сервисов (см. нулевой уровень, swamp of POX в Richardson Maturity Model ).

    Ранее эти стандарты были более популярны в связи с большим желанием интегрировать друг с другом всевозможные информационные системы, размазанные по миру. Многие из таких систем как раз сейчас работают в продакшене, однако далеко не все новые проекты разрабатываются на основе WCF.

    Классические веб-сервисы многими недолюбливались, в частности потому что:
    а) REST-ом как правило и не пахнет, HTTP как правило использовался исключительно как транспорт для RPC: т.е. вместо GET/PUT/POST/DELETE/.. всегда вызывался POST с параметрами запроса в его теле. Цитата из ссылки:
    These services have a single URI, and use a single HTTP method (typically POST). For example, most Web Services (WS-*)-based services use a single URI to identify an endpoint, and HTTP POST to transfer SOAP-based payloads, effectively ignoring the rest of the HTTP verbs.

    б) стандарты группы WS-* очень сложные, все технологии на их основе просто не могут быть простыми (как и в частности WCF). Да, есть свои плюсы вроде "могу вызвать что угодно у кого угодно по какому хочешь протоколу", но не всегда такая гибкость была реально нужна.

    Уже давно в многих новых системах наблюдается сдвиг к REST-архитектуре, как к более масштабируемой и простой для потребления клиентом, и, следовательно, протокол HTTP используется по прямому назначению, а не тупо как транспорт для сообщений. А там где REST неудобен/излишен и где RPC лучше походит, проще взять для этого более легковесный протокол или вообще поднять свой на базе какого-нибудь protobuf, как делают во многих игровых проектах.

    Соотв-но WCF сегодня реже выбирают для разработки новых проектов, т.к. для него HTTP REST сервисы немного не "родные". Удобнее взять другие фреймворки вроде ASP.NET Core или Nancy.
    Ответ написан
    Комментировать
  • Как автоматически выбрать тип данных?

    Nipheris
    @Nipheris Куратор тега C#
    Воспользоваться благом C# "все есть объект":
    1) заменить List<List<string>> на List<List<object>>;
    2) dt.Rows[i].Field<string>(dt.Columns[j].Caption) заменить на dt.Rows[i][dt.Columns[j]];

    3) объяснить назначение всего данного кода, ибо он напоминает переливание из пустого в порожнее, и List<List<object>> это бомба по определению.
    Ответ написан
    Комментировать
  • Как лучше привязать WCF приложение к проекту на WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Правильно ли я сделал, что определение класса самого объекта из списка расположил в проекте wcf-сервиса? Класс списка со всеми операциями я расположил там же.

    Зависит от вашего задания. В принципе для такого тестового не вижу смысла заморачиваться разбиением на проекты.

    сейчас я скопировал адрес из wcf-test-client и вставил как service reference в wpf

    Это действие необходимо вам прежде всего для генерации кода клиента. Куда конкретно подключаться насколько я помню, можно указать в конструкторе клиента.
    Ответ написан
    Комментировать
  • Как захостить WCF на консоль так, чтоб служба была доступна в локальной сети?

    Nipheris
    @Nipheris Куратор тега C#
    консольное (WinForms)

    Это должно быть через слеш.

    99% что проблема в том, что ваша служба слушает на локалхосте, а не на реальном интерфейсе или на 0.0.0.0. В зависимости от того, как вы ее хостите, где-то (в коде или конфиге) у вас должен быть указан адрес для прослушивания. Если он 127.0.0.1 или localhost - вам нужно заменить его на адрес сетевого интерфейса, где запущена служба. Или слушать на всех интерфейсах сразу, тогда урл будет вида http://+:порт/ - причем если у вас http, то для запуска вам понадобятся права администратора (т.к. сервис будет регаться в системном обработчике http.sys).

    По большому счету вопрос не про WCF, а про запуск сетевой службы в принципе. Апач или IIS вам тоже ничего не будут отвечать по сети, если попросить их слушать на localhost.
    Ответ написан
    6 комментариев