Frage

Ich habe einen Windows-Dienst, nimmt Meldungen von verschiedenen MSMQs. Der Dienst greift die Nachrichten aus den Warteschlangen auf, und führt dann einen spezifischen Arbeitsablauf auf der Warteschlange basiert die Nachricht kam aus. Ist es möglich, einen WCF-Dienst zu konfigurieren, um eine Nachricht von einem Endpunkt zu übernehmen und es in einer Warteschlange stellen? Ich würde für den Dienst wie mehrere Endpunkte zu haben, und abhängig davon, welcher Endpunkt empfangen die Nachricht, würde die Nachricht in einer anderen Warteschlange platziert werden. Ich habe Dinge über NetMsmqBinding gesehen, aber bisher habe ich nicht in der Lage zu bestimmen, ob dies für den Gebrauch gedacht ist, über die ich denke.

Jede Hilfe ist willkommen,

Mike

War es hilfreich?

Lösung 2

Die Art und Weise ich in der Lage war, um dies zu war durch eine benutzerdefinierten Servicehost-Klasse erstellen, dass ich einen Konfigurationsnamen passieren könnte. Dies ist eine Alternative zu der Standardimplementierung, die den Service Implementation Typnamen verwendet die Konfiguration zu finden. Das erlaubte mir, mehrere Instanzen der gleichen Anwendung auf der gleichen Maschine laufen zu lassen. Zusätzlich zu, dass innerhalb der benutzerdefinierten Service-Klasse habe ich eine benutzerdefinierte MessageInspector, die sich an jedem Endpunkt anhängen würde für Nachrichten abzuhören. Ich verwende dann die IDispatchMessageInspector.AfterReceiveRequest () Methode, um die ankommende Nachricht zu nehmen und es dann in eine Warteschlange stellen, dass ich in meiner Konfiguration definieren. Ein wenig kompliziert, aber es funktioniert perfekt für unser Szenario.

Andere Tipps

Bin ich das richtig bekommen - Sie haben wollen

  • ein WCF-Dienst für die Außenwelt ausgesetzt mehrere Endpunkte mit
  • je nachdem, welche den Nachrichtenendpunkt kommt in den WCF-Dienst, soll es diese Nachrichten in einzelne MSMQ Warteschlangen setzen?

Sie können auf jeden Fall einen WCF-Dienst, die eine beliebige Anzahl von Endpunkten nach außen aussetzen und das würde eingehende Nachrichten in eine MSMQ-Warteschlange löschen. Ich bin nur nicht sicher, ob Sie in der WCF-Dienst Methode in der Lage sein zu wissen, welche die Anfrage Endpunkt kam in ..... Regel, wird die WCF-Service-Klasse weiß nichts darüber, wo die Anfrage kam (und Regel braucht nicht zu wissen, ...).

Ich sehe ein paar Ansätze für diese:

  • hat mehrere Dienste, eine für jeden (Typen) Endpunkt; Sie alle können ihren Code und teilen alles, aber wenn Sie diese in separate Service-Klassen trennen, dann würde jeder Serviceklasse von Natur aus wissen , was es Endpunkt dient, und könnte somit wissen, was MSMQ Queue in die Info zu setzen

  • einen Weg finden, einige Header-Informationen zusammen mit der Nachricht zu senden, die Sie irgendwie sagt, wo die Nachrichten setzen

  • in WCF 4.0, könnten Sie in der Lage sein, etwas mit dem neuen WCF-Routing-Service zu tun .... nicht ganz sicher, wie das funktionieren würde, aber - da es auch eine Art von „Hinweis“ erfordern würde, zu wissen, der Endpunkt es auf und wie die ankommende Nachricht

  • genannt wurde

net.msmq Bindungen ermöglichen einem WCF-Client direkt an eine MSMQ-Warteschlange zu schreiben, auch wenn die Warteschlange Lese WCF-Dienst nicht leben - es ist noch nicht einmal existieren müssen. net.msmq Bindungen ermöglicht auch Automagic Lesen von Warteschlangen. Keine Verwendung von Message zu schreiben oder lesen aus, eine Warteschlange ein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top