Привязки WCF - так много! Как выбрать один? - PullRequest
16 голосов
/ 26 октября 2008

У нас есть R Сервер (R - это язык программирования, используемый в статистическом анализе), который в основном берет скрипт и файл csv, обрабатывает некоторые данные и возвращает результаты в виде текста.

Мне нужно написать службу на сервере R, чтобы клиенты .net (например, .Net Windows Forms или ASP.Net) могли подключиться к серверу R, отправить сценарий и файл CSV и получить результаты обратно. .

Я смущен множеством различных привязок, доступных для меня, и информация в Интернете, кажется, скудна / разбросана о том, что выбрать.

Кроме того, лучше ли запускать службу в IIS или как отдельную службу прослушивания типа «командной строки» (последняя выглядит некрасиво по сравнению с IIS, и я понятия не имею, почему кто-то решит сделать это, если сможет запустить это в IIS)?

Ответы [ 4 ]

10 голосов
/ 26 октября 2008

Лично я бы порекомендовал простейшую привязку, которая дает то, что вам нужно. Я сделал довольно много WCF (некоторые довольно сложные), и мне никогда не приходилось использовать ничего, кроме BasicHttpBinding; это также обеспечивает максимально возможную совместимость с клиентами, отличными от .NET, и позволяет использовать такие вещи, как MTOM, для эффективной двоичной передачи.

Re хостинг; IIS действительно самый простой для установки клиент / сервер; две особые сильные стороны:

  • простая настройка SSL (т.е. вы просто настраиваете IIS, и WCF будет его использовать)
  • простой баланс нагрузки (просто баланс нагрузки веб-фермы)

считаю, WCF, работающий поверх BasicHttpProfile, также может использовать настройки сжатия IIS [GZip / Deflate], но не цитируйте меня ...)

Вы можете использовать автономный хост (обычно через службу Windows), если (например) вам нужен долго работающий сервер с состоянием. У IIS есть такая привычка (по замыслу) перерабатывать пулы приложений, что нехорошо, если вы что-то храните в памяти! Другой пример - это когда вы хотите, чтобы он уже работал для быстрой производительности «первого удара» (вместо того, чтобы ждать, пока IIS / ASP.NET раскрутится). Примером, охватывающим оба из них, может быть размещение сервера WF (рабочий процесс).

Опять; если вам не нужна эта сложность, выберите самый простой вариант: хостинг в IIS.

8 голосов
/ 26 октября 2008

Действительно есть много вариантов.

Binding

Привязки, доступные в WCF, представляют собой набор протоколов для распространенных сценариев. Он определяет транспорт, сообщения и информацию о безопасности.

При выборе привязки вам необходимо выяснить, какая функция вам нужна. например вам может понадобиться способ

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

Если вы знаете, что клиенты всегда из точечной сети, вы можете использовать связывание по протоколу net tcp, которое работает быстрее, чем basicHttpbinding. Однако basicHttpBinding - это совместимый протокол, с которым могут без проблем общаться даже клиенты php или java.

Определите свои собственные требования к службе, а затем найдите существующую привязку, соответствующую вашим потребностям. Если не существует какой-либо существующей привязки, вы можете создать собственную привязку, которая называется настраиваемой привязкой, она может объединять функции из разных привязок. вместе для достижения цели.

Хостинг

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

Подробнее о переплете

Если вы хотите, чтобы ваш сервис вызывался в браузере, т.е. в javascript WebHttpBinding - это хорошая точка, определенная для вас. Вы можете использовать enbableWebScript, чтобы служба понимала JSON для javascript.

Наличие

Если одна конкретная привязка не может удовлетворить все требования, вы можете выставить каждую службу в разных привязках на разных конечных точках. например хост / мыло хост / nettcp хост / json

5 голосов
/ 29 октября 2008

Я бы предложил обратиться к книге Юваля Лоуи "Программирование служб WCF".

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

http://www.code -magazine.com / article.aspx? Quickid = 0605051 & страница = 3

0 голосов
/ 22 февраля 2012

Извлечение из книги WCF4 wros "Все эти встроенные привязки построены на стандартах, которые работают для определенных сценариев, но также будут работать, если вы выберете неправильный или менее эффективный вариант. Так как вы выбираете, какой из них подходит ли вам?

Наиболее очевидное решение, если вам нужно взаимодействовать с приложениями, не относящимися к WCF. Если ваша служба предназначена для связи с клиентами WCF, то вы можете использовать одну из привязок с префиксом «net». Помните, что вы можете определить несколько конечных точек для одного и того же сервиса, который будет использовать разные привязки. Это позволяет воспользоваться преимуществами оптимизации производительности для клиентов WCF, но при этом обеспечить поддержку служб ASMX и стандартов WS- *. Они обеспечивают дополнительную безопасность и другие функции, которыми пользуются многие клиенты f.

Например, если вы хотите установить связь WCF с WCF, выбор NetTcpBinding с двоичной кодировкой ускоряет обмен данными в четыре или пять раз быстрее, чем BasicHttpBinding с кодировкой текста.

Эти привязки, предоставленные WCF, должны охватывать большинство случаев, в которых вы нуждаетесь: однако, если вам нужно изменить или создать полностью обязательную привязку, WCF позволяет сделать это очень просто "

...