Есть ли у кого-нибудь пример того, почему я бы сам принимал WCF-службу

Думаю, мой ум так занят IIS и веб-приложениями, что я не могу придумать причину, чтобы решить проблему использования самообслуживаемого WCF-сервиса. У меня всегда была доступность IIS, поэтому создание самообслуживаемого сервиса WCF кажется больше работы, чем хотелось бы. Почему я хочу это сделать?

Ответ 1

Множество точек:

  • нет необходимости в IIS - это может быть отличным плюсом для определенных серверов.
  • вы полностью определяете адреса службы - с помощью IIS они продиктованы именем сервера, именем виртуального каталога, а также именем и расширением SVC файла (например, http://server/virtualdir/yourservice.svc, а при самообслуживании вы может использовать http://Server:7171/Services/MegaService или все, что вам нравится)
  • нет риска столкнуться с проблемами, связанными с повторным использованием пулов приложений (это можно значительно уменьшить, используя отдельные выделенные пулы приложений для ваших служб WCF).
  • способность останавливать и запускать службы NT, таким образом, например, (в меньшей степени, легко с IIS).
  • больше контроля над созданием и опциями ServiceHost
  • поддержка всех протоколов из коробки - netTcpBinding и т.д. требует дополнительных шагов (которые могут быть забыты) на IIS7 и невозможны для IIS6

Ответ 2

Например, рассмотрим преимущества хостинга в службе windows:

  • Время работы контролируемого процесса
  • Область применения
  • Поддерживается во всех версиях Windows
  • также вы не привязаны только к HTTP, если вы используете Windows 2003 и ниже (без WAS)

Вы также можете рассмотреть

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

Ответ 3

Все о том, как вы хотите использовать WCF. Не всегда логика, которую вы хотите показывать как услугу, должна/быть размещена в IIS. Например:

  • вы используете WCF для создания канала P2P между несколькими экземплярами вашего клиентского приложения в локальной сети.
  • вы создаете локальную службу WCF, которая развертывается на клиентском SKU, где IIS не установлен по умолчанию.
  • вы хотите полностью контролировать свои конечные адреса.
  • вы хотите использовать каналы net.tcp или net.pipe.
  • вам нужен полный контроль над жизненным циклом и моделью экземпляра вашего сервиса.
  • вы хотите, чтобы служба выполнялась как интерактивный пользователь (олицетворение не всегда является ответом)

Ответ 4

Если вы используете 64-разрядную Windows, вы не можете автоматически компилировать и запускать службу WCF, вы должны самостоятельно выполнять хостинг.

Я спросил об одной конкретной ситуации здесь: Способы доступа к 32-битной DLL из 64-битного exe

У меня было 64-битное приложение, которое требовало использования 32-разрядной DLL. Поэтому я подумал, что просто обернуть 32-битную DLL в 32-разрядную службу WCF. Нет. Я не мог заставить службу запускать 32-битный. Пришлось к хозяину.

Ответ 5

Один пример использования - клиентские приложения. Вы можете самостоятельно запустить службу WCF в клиентском приложении, чтобы клиент мог получать уведомления из бэкэнд-системы.

Ответ 6

Высокие загруженные сервисы привязки net.tcp или net.pipe не предназначены для IIS. Его работа будет работать только с IIS 7 + дополнительными 3 услугами: WAS, Net. * Адаптер прослушивания и общий доступ к порталу (событие, если вы не используете совместное использование). Это очень сложное решение. Вы должны настроить обмен портами, но однажды он сработает с ошибкой сокета или трубы. SelfHost не будет.

IIS не предназначен для потоковой передачи. Вы не будете работать "напрямую с сетевым потоком". Вы будете работать с буферами памяти или временными файлами, поэтому вам не пригодится потоковая передача.

P.S. Все о WCF 3.5 и IIS 7.5. Я надеюсь, что следующие версии будут намного лучше.