Автоматическая активация службы WCF net.msmq
У меня есть службы WCF, которые используют протокол net.msmq, размещенный в IIS 7. Моя проблема заключается в том, что службы не активируются при появлении нового сообщения в очереди, вы должны сначала физически просмотреть службы, прежде чем они начнут собирать любые сообщения.
Есть ли способ активировать эти службы?
Заранее благодарим за помощь
С уважением,
Brian
Ответы
Ответ 1
Там действительно хорошая серия из трех частей о том, как запустить WCF, MSMQ и IIS и хорошо сыграть в блоге Tom Hollander:
Может быть, это поможет? MSMQ, размещенный в IIS7, обязательно должен автоматически собирать сообщения WCF, если все настроено правильно.
Есть несколько настроек, которые не указаны из коробки - см. часть 1. Возможно, вам придется добавить и включить дополнительные функции Windows, и вам может понадобиться запустить инструмент appcmd.exe
для настройки WAS (Windows Activation Server, часть IIS7) для автоматической обработки запросов, отличных от http.
Марк
Ответ 2
Я знаю это старое сообщение, но в случае, если кто-то еще придет с этой проблемой...
Если служба не активируется после завершения пула приложений, это, скорее всего, связано с тем, что имя очереди не соответствует URI службы, поэтому WAS не знает, какое приложение будет активировано.
Так, например, если вы создаете приложение "Услуги" на веб-сайте по умолчанию и имеете имя FirstService.svc, имя очереди должно быть private $\ Services/FirstService.svc
[Изменить: имя очереди должно содержать имя приложения также во множественном числе]
Ответ 3
Это связано с тем, что при использовании MSMQ WAS не будет автоматически активирован или не прогревается. Решения должны взглянуть на модуль IIS 7 Warm Up или иметь что-то вроде балансировки нагрузки для вашего обслуживания (мы используем устройство F5 сделать это). Обновление - вот ссылка для Инициализация приложений IIS 8
Ответ 4
Я обнаружил, что в Windows 7 с IIS 7.5 и .NET 4.0 служба NetMsmqActivator
отключена и остановлена по умолчанию. Вам нужно включить его и запустить.
Кроме того, очередь должна принимать "Получать сообщение" и "Сообщение Peek" для учетной записи, используемой пулом приложений, и для учетной записи, используемой NetMsmqActivator
. При установке по умолчанию вы можете использовать IIS APPPOOL\ASP.NET v4.0
(вам нужно ввести его: 3 'P's, позаботьтесь о пробелах) и NETWORK SERVICE
.
Ответ 5
Мы наблюдаем эту проблему уже более месяца в системе с этими свойствами:
- Смешанные службы, как http, так и msmq, размещенные в WAS на IIS7.5
- Протокол msmq: net.msmq
- услуги, которые не выполняются на корневом веб-сайте, но в приложении под
Мы выполняем все рекомендации и решения проблем, связанные с:
* Настройка протокола на уровне iis и приложения.
* Именование имен в очереди
* параметры безопасности очереди, службы windows и iis
Но проблема продолжалась.
Наше решение заключалось в следующем: http://www.daczkowski.net/tag/wcf/
То есть, чтобы установить appfabric на наш iis и настроить службы для автозапуска.
Сама проблема довольно сложно определить полностью, что мы можем сказать только потому, что "иногда служба перестает обрабатывать из очереди"
Ответ 6
Мое решение - это смешение некоторых ответов здесь.
Моя очередь имеет аутентификацию, поэтому некоторые шаги могут не понадобиться, если аутентификация не используется.
Ниже приведены шаги, которые я выполняю, чтобы включить его в окно 2012:
1) Установите службы активации без доступа к сети WAP (https://msdn.microsoft.com/en-us/library/ms731053(v=vs.110).aspx)
2) Создайте очередь с тем же именем, что и приложение IIS, например private$/<WCF application>/myservice.svc
.
Служба Net.Msmq Listener Adapter
будет пытаться сопоставить очередь и имя приложения WCF в IIS, как указано VdesmedT.
3) Включить протоколы на сайте и в приложении.
Сначала создайте привязку:
% windir%\system32\inetsrv\appcmd.exe установить сайт "Веб-сайт по умолчанию". - + привязок [протокол = 'net.tcp', bindingInformation = '808: *']
Связывание сайтов должно выглядеть следующим образом:
![введите описание изображения здесь]()
Затем включите протокол net.msmq
для сайта
% windir%\system32\inetsrv\appcmd.exe set config -section: system.applicationHost/sites "/[ name=" Веб-сайт по умолчанию "]. [path = '/']. enabledProtocols": "http, net.msmq" /commit: apphost
Эта команда будет перезаписывать протоколы, поэтому, если у вас есть более, чем http enable, вам нужно добавить ее в командную строку.
В Advanced Settins вы должны увидеть следующее:
![введите описание изображения здесь]()
И, наконец, включите протокол net.msmq
для приложения.
% windir%\system32\inetsrv\appcmd.exe установить приложение "Веб-сайт по умолчанию /" /enabledProtocols:http,net.tcp
Экран "Дополнительные параметры" для приложения должен показывать то же самое, что и в дополнительных настройках для сайта, в строке разрешенных протоколов.
4) Предоставьте разрешения для очереди для приложения IIS для чтения, просмотра и удаления, получения свойств и установки свойств.
Учетная запись по умолчанию - IIS Apppool\DefaulApp
5) Предоставьте разрешение peek на очередь для сервисов Net.Msmq Listener Adapter
(по умолчанию Network Service
)
Не нужно, но мне пришлось перезагружать после изменения разрешений.
Проверка:
-
Чтобы проверить, правильно ли настроен WCF, просто используйте просмотр WCF
приложение для его активации. Любые сообщения в очереди должны обрабатываться.
-
Чтобы проверить, активирует ли WAS приложение WCF, переустановите пул приложений и отправьте новое сообщение. Если WAS
это должен быть процесс немедленно.
Ответ 7
Просто установите для приложения "Автозапуск" значение "Включено" в IIS