Таким образом, у вас есть непрерывный процесс, который извлекает данные из некоторого источника и передает его. Это хороший случай для фонового потока в WCF, потому что ваша работа не основана на входящих вызовах, и это не может быть сделано.
Помните, что рабочие процессы IIS могут быть отключены в любой момент времени по причинам, которые вы не можете контролировать. Кроме того, рабочие процессы могут перекрываться при переработке. Это означает, что в одном и том же поле два экземпляра этого потока могут работать одновременно. То же самое верно, если вы хотите запустить это приложение на нескольких машинах по причинам HA.
Услуги Windows более стабильны, но они также должны быть перезапущены (например, при развертывании или при наличии ошибки, которая приводит к сбою процесса).
Также убедитесь, что уловили ошибки, которые происходят в этой теме. Необработанное исключение убивает процесс без уведомления разработчика.
Поскольку вы размещены в службе Windows, я не вижу причин поддерживать поток в конструкторе класса Service
. Поддерживать состояние вне WCF. Например, в вашем классе обслуживания Windows.
Нет, я бы рекомендовал просто использовать ** сервисную модель ** для каждого вызова. Каждый запрос получает свою собственную копию класса обслуживания, вызываемый метод службы, и затем экземпляр снова освобождается. Это не мешает вам справляться с серьезными проблемами безопасности потоков и тому подобное –
Моя служба работает и слушает по сети и отправляет сообщения на сервер MVC через веб-интерфейс. Для службы для каждого вызова мне нужно создать фоновый поток в MVC и дуплексную связь. Поэтому я предпочитаю создавать фоновый поток в WCF и передавать сообщения в MVC. Не могли бы вы объяснить, почему это плохая практика? – Michael
Что будет делать эта фоновая нить? Зачем это нужно? – usr