Domanda

Ho un servizio di Windows che raccoglie i messaggi provenienti da varie MSMQs. Il servizio raccoglie i messaggi dalle code, e quindi esegue una specifica flusso di lavoro basato sulla coda il messaggio è arrivato dalla. E 'possibile configurare un servizio WCF per accettare un messaggio da un endpoint e metterlo in una coda? Vorrei per il servizio di avere più punti finali, ea seconda di quale endpoint ricevuto il messaggio, il messaggio sarebbe posto in una coda diversa. Ho visto cose su netMsmqBinding ma finora non sono stato in grado di determinare se questo è pensato per l'utilizzo sto pensando.

Ogni aiuto è apprezzato,

Mike

È stato utile?

Soluzione 2

Il modo in cui sono stato in grado di andare su questo è stata la creazione di una classe di ServiceHost personalizzata che ho potuto passare un nome di configurazione. Si tratta di un'alternativa per l'implementazione di default che utilizza il servizio nome del tipo di implementazione per individuare la configurazione. Questo mi ha permesso di eseguire più istanze della stessa applicazione sulla stessa macchina. In aggiunta a ciò, all'interno della classe di servizio personalizzato ho aggiunto una consuetudine MessageInspector che si sarebbe allegare ad ogni endpoint per ascoltare i messaggi. Ho quindi utilizzare il metodo IDispatchMessageInspector.AfterReceiveRequest () per portare il messaggio in entrata e poi metterlo in una coda che io definisco dentro la mia configurazione. Un po 'complicato, ma funziona perfettamente per il nostro scenario.

Altri suggerimenti

mi appare questo correttamente - si vuole avere

  • un servizio WCF esposto al mondo esterno con più endpoint
  • a seconda di quale punto finale del messaggio viene al servizio WCF, dovrebbe mettere quei messaggi in code MSMQ separate?

Si può sicuramente avere un servizio WCF che esporrà qualsiasi numero di endpoint verso l'esterno e che sarebbe rilasciare i messaggi in arrivo in una coda MSMQ. Solo che non sono sicuro se sarete in grado all'interno del metodo di servizio WCF per sapere quale endpoint la richiesta è venuto in su ..... tipicamente, la classe di servizio WCF non sa nulla su dove la richiesta è venuto da (e in genere non ha bisogno di sapere ...).

Vedo alcuni approcci a questo:

  • avere più servizi, uno per ogni (tipo di) endpoint; possono condividere tutti i loro codice e tutto, ma se si separa questo in classi di servizio separati, quindi ogni classe di servizio sarebbero intrinsecamente so che cosa endpoint che serve, e quindi poteva sapere cosa coda MSMQ per mettere le informazioni in

  • trovare un modo per inviare alcune informazioni di intestazione con il messaggio che indica in qualche modo dove mettere i messaggi

  • in WCF 4.0, si potrebbe essere in grado di fare qualcosa con il nuovo servizio di routing WCF .... non del tutto sicuro come dovrebbe funzionare, ma - dal momento che richiederebbe anche una sorta di "suggerimento" di sapere che endpoint è stato chiamato e su come instradare il messaggio in arrivo

attacchi net.msmq consentire a un client WCF per scrivere direttamente a una coda MSMQ, anche se il servizio WCF coda di lettura non è in diretta - non ha nemmeno esistere. attacchi net.msmq permette anche la lettura automagic dalle code. Nessun uso di MessageQueue da scrivere o leggere da una coda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top