Ich habe einen WCF 4 Routing-Service erstellt und ihn programmgesteuert konfiguriert. Mein Code ist etwas mehr ausgeräumt, als er es sein müsste (die Wartbarkeit für andere ist ein Anliegen, daher die Kommentare), aber er funktioniert definitiv. Dies hat zwei Filter: einen filtert bestimmte Aktionen zu einem bestimmten Endpunkt, und der zweite sendet die verbleibenden Aktionen an einen generischen Endpunkt.
// Erstellen der Nachrichtenfiltertabelle für das Routen von Nachrichten
MessageFilterTable> filterTable = new MessageFilterTable>();
// Wenn wir ein Abonnement verarbeiten, senden wir es an den Abonnement-Endpunkt
filterTable.Add(
new ActionMessageFilter(
"http://etcetcetc/ISubscription/Subscribe",
"http://etcetcetc/ISubscription/KeepAlive",
"http://etcetcetc/ISubscription/Unsubscribe"),
new List()
{
new ServiceEndpoint(
new ContractDescription("ISubscription", "http://etcetcetc/"),
binding,
new EndpointAddress(String.Format("{0}{1}{2}", TCPPrefix, HostName, SubscriptionSuffix)))
},
HighRoutingPriority);
// Ansonsten senden wir alle anderen Pakete an den Routing-Endpunkt
MatchAllMessageFilter filter = new MatchAllMessageFilter();
filterTable.Add(
filter,
new List()
{
new ServiceEndpoint(
new ContractDescription("IRouter", "http://etcetcetc/"),
binding,
new EndpointAddress(String.Format("{0}{1}{2}", TCPPrefix, HostName, RouterSuffix)))
},
LowRoutingPriority);
// Fügen Sie dann die Filtertabelle als Teil eines Routing-Verhaltens dem Host hinzu
_routingHost.Description.Behaviors.Add(
new RoutingBehavior(new RoutingConfiguration(filterTable, false)));