2009-09-09 19 views
7

Tengo un servicio WCF con netMsmqBinding. Mi cliente puede enviar mensajes a mi cola, y cuando el servicio se está ejecutando, recupera los mensajes de la cola como se esperaba. Si el servicio no se está ejecutando, los mensajes recibidos se ponen en cola hasta que se inicia el servicio.WCF MSMQ vinculante con un servicio IIS: cómo crear una instancia del servicio?

Mi problema es que el servicio no se inicia cuando un mensaje llega a la cola. El servicio está alojado en IIS, por lo que no se crea una instancia hasta que IIS recibe una solicitud. Si busco el servicio, procesa los mensajes en la cola, ¡pero obviamente este no es el método que yo uso para procesar la cola!

Espero que necesite cambiar la implementación del servicio o cambiar la configuración de IIS, pero no sé dónde ni qué cambiar.

ACTUALIZACIÓN

¿Alguien realmente utilizan MSMQ sobre WCF? Lo tuve trabajando por un tiempo corto - habilité el enlace en un sitio web diferente en el mismo servidor, extrañamente - pero ahora de alguna manera ha dejado de funcionar de nuevo.

El único problema que tengo es con la activación del servicio cuando hay un mensaje en la cola. En la actualidad, la cola solo procesa cuando se crea una instancia del servicio, p. cuando navego por el archivo .svc. Tengo el protocolo net.msmq habilitado en la aplicación, y tengo el enlace net.msmq habilitado en el sitio ... ¿hay algo más que deba hacer?

Respuesta

5

Necesita explícitamente configurar IIS para la activación sin HTTP. No conozco todos los detalles de la parte superior de mi cabeza, pero básicamente necesitas usar appcmd para configurar y habilitar la activación de enlace net.msmq.

Compruebe this blogpost o this screencast debería darle todos los detalles.

2

Creo que mis problemas usando vinculante sobre WCF MSMQ eran principalmente alrededor de IIS.

que tenían un sin fin de problemas que utilizan Windows XP/Server 2003 con IIS 6.

Uso de Windows 7 o Server 2008 con IIS 7.5 todo funciona bien.

Una sugerencia aún mejor es ejecutar MSMQ como un servicio administrado/Servicio de Windows o una aplicación independiente en lugar de hacerlo bajo IIS.

0

Una opción es alojar esto como servicio de Windows. Dado que IIS no activa automáticamente el WAS cuando se coloca un mensaje en una cola.
Otra opción es crear un servicio de Windows simple que ejecute este servicio después del intervalo de tiempo especificado. Exponemos otro contrato en el mismo servicio, sin IsOneWay = verdadero (ya que esta operación no interactuará con las colas). Luego se creó un servicio de Windows que hace ping a la URL del servicio WCF después de un intervalo de tiempo especificado, lo que garantiza que el proceso WAS esté siempre activo y WCF recoge los mensajes tan pronto como haya un mensaje en la cola.

Además, asegúrese de que el servicio también esté alojado en http & net.msmq ambos.

Encontré un buen artículo para una guía paso a paso para implementar WCF con MSMQ usando Net.Encuadernación Msmq:
Setup MSMQ with WCF using Net.Msmq binding

Cuestiones relacionadas