Mein Vorschlag, wenn Sie schnell und einfach vorgehen müssen, um einen dauerhaften (getrennten) Betrieb mit WCF zu ermöglichen, ist ein Blick in die WCF-MSMQ-Bindungen. Wenn Sie in einer größeren Umgebung etwas benötigen, schauen Sie sich nServiceBus an.
In meinen Augen würde nServiceBus in einer größeren verteilten Umgebung wirklich zu glänzen beginnen. Nehmen Sie zum Beispiel das folgende Beispiel (das wäre die Hölle auf Erden mit WCF, aber einfach mit nServiceBus):
- Infrastruktur bestehend aus App-Server-Schicht, Cache-Server-Schicht, Nur-Lese-Datenbankschicht und Lese- / Schreib-Datenbankschicht
- Jedes Mal, wenn der Client einen neuen Eintrag einreicht, möchten Sie wirklich, dass alle Ebenen gleichzeitig aktualisiert werden
- In WCF müssen Sie separate Dienste auf jeder Ebenenebene verfügbar machen und den Client dazu bringen, auf alle Dienste zuzugreifen (oder von einer zentralen Orchestrierung dasselbe für Sie tun lassen).
- In nServiceBus müsste jede Schicht Abonnent dieser Informationen sein, und der Client würde sie einmal veröffentlichen, damit der Servicebus den Rest erledigen kann
WCF verfügt über MSMQ-Bindungen
Wenn Sie sich jedoch hauptsächlich an WCF halten müssen (kurze Zeiträume, andere WCF-Funktionen), empfehle ich Ihnen, diesen Artikel bei MSDN zu lesen. Sie erfahren, wie Sie die WCF-Bindungen für MSMQ verwenden und anschließend einen Dienst von HTTP nach MSMQ migrieren. Auf dem Weg dorthin werden einige Probleme mit diesem Szenario (und nützliche Lösungen für diese Probleme) gezeigt.
In beiden Vorschlägen wird MSMQ in großem Umfang verwendet. Beachten Sie Folgendes: Im Gegensatz zu Apache MQ, RabbitMQ und anderen gängigen Warteschlangensystemen ist MSMQ keine typische brokerbasierte Warteschlangenarchitektur, sondern eine verteilte Warteschlange. Dies bedeutet, dass wenn Ihr WCF-Client eine Nachricht über einen MSMQ-Transport sendet, während keine Verbindung zu dem Remoteserver hergestellt werden kann, der die Warteschlange hostet, der Clientcomputer die Nachricht stattdessen lokal in eine Warteschlange einreiht, die als "ausgehende Warteschlange" bezeichnet wird. Die Nachricht bleibt dort sicher, bis der MSMQ-Dienst des Clients erkennt, dass er erneut eine Verbindung zum Remote-MSMQ-Dienst herstellen kann. An diesem Punkt fließt die Nachricht vom Client zum Endziel.
Es gibt mindestens eine Einschränkung: Wenn der Remoteserver zu lange offline ist (überprüfen Sie Ihre Dokumentation auf MSMQ), gibt der Client auf und verschiebt die Nachricht vom Postausgang in die Warteschlange für nicht zustellbare Nachrichten. In die Warteschlange für nicht zustellbare Nachrichten übertragene Nachrichten können nicht automatisch erneut gesendet werden, sondern müssen neu erstellt werden.
Wenn Sie eine Verschlüsselung benötigen und kein Active Directory haben, führt Sergey Sorokin in diesem Blogeintrag die Schritte auf, die zum Verschlüsseln der Kommunikation von MSMQ mit WCF ohne Active Directory erforderlich sind.