Связывание WCF MSMQ со службой IIS - как создать экземпляр службы?
У меня есть служба WCF с netMsmqBinding. Мой клиент может отправлять сообщения в мою очередь, и когда служба работает, она получает сообщения из очереди, как и ожидалось. Если служба не запущена, полученные сообщения помещаются в очередь до запуска службы.
Моя проблема в том, что служба не запускается, когда сообщение попадает в очередь. Служба размещена в IIS, поэтому она не создается до тех пор, пока IIS не получит запрос. Если я обращаюсь к службе, то она обрабатывает сообщения в очереди, но, очевидно, это не мой желаемый метод обработки очереди!
Я ожидаю, что мне нужно изменить реализацию службы или изменить настройку IIS, но я не знаю, где или что изменить.
ОБНОВИТЬ
Кто-нибудь на самом деле использует MSMQ поверх WCF? У меня это работало в течение короткого времени - я включил привязку на другом веб-сайте на том же сервере, причудливо - но теперь он как-то перестал работать снова.
Единственная проблема, с которой я сталкиваюсь - это активация службы, когда в очереди есть сообщение. В настоящее время очередь обрабатывается только при создании экземпляра службы, например, когда я просматриваю файл.svc. У меня включен протокол net.msmq в приложении, и у меня включена привязка net.msmq на сайте... Есть ли что-то еще, что мне нужно сделать?
4 ответа
Вам явно необходимо настроить IIS для активации без HTTP. Я не знаю всех подробностей, но в основном вам нужно использовать appcmd для настройки и включения активации привязки net.msmq.
Проверьте этот блог или этот скринкаст должен дать вам все детали.
Это может сэкономить кому-то часы, которые мне потребовались: http://msdn.microsoft.com/en-us/library/ms731053.aspx
Я считаю, что мои проблемы с использованием привязки MSMQ поверх WCF были в основном связаны с IIS.
У меня не было конца проблем с использованием Windows XP / Server 2003 с IIS 6.
В Windows 7 или Server 2008 с IIS 7.5 все работает хорошо.
Еще лучшим предложением является запуск MSMQ в качестве управляемой службы / службы Windows или автономного приложения, а не в IIS.
Один из вариантов - разместить его в качестве службы Windows. Поскольку IIS автоматически не активирует WAS, когда сообщение помещается в очередь.
Другим вариантом является создание простой службы Windows, которая проверяет связь с этой службой через заданный интервал времени. Мы выставили другой контракт на тот же сервис без IsOneWay = true (так как эта операция не будет взаимодействовать с очередями). Затем создал службу Windows, которая проверяет URL-адрес службы WCF через определенный интервал времени, что гарантирует, что процесс WAS всегда активен, а WCF забирает сообщения, как только в очереди появляется сообщение.
Кроме того, убедитесь, что служба также размещена на http и net.msmq.
Я наткнулся на хорошую статью для пошагового руководства по реализации WCF с MSMQ с использованием привязки Net.Msmq:
Настройте MSMQ с WCF, используя привязку Net.Msmq