2009-03-03 8 views
2

Also das Modell, das ich für meine Lösung brauchen, ist wie folgt:Biztalk Port Group und Filtern

Ich brauche die Datenbank abzufragen und basierend auf einem Ergebnis, schaffen für mehr Daten eine Anfrage an die Datenbank, erhalten die Antwort und übergeben Sie es an eine Gruppe von Ports, für die basierend auf einer heraufgestuften Eigenschaft nur einer der Ports aktiv ist.

Es sieht wie folgt aus:

http://i40.tinypic.com/2zq61qh.jpg

Wenn Sie jedoch „Temp Out“ zuweisen, um einen Sendeport-Gruppe, die Nachricht an alle Ports in der Gruppe gesendet wird, ungeachtet der Filter gesetzt an jedem Port. Aus meiner Sicht ist dies das erwartete Verhalten (lesen Sie here).

Also erkundete ich andere Optionen wie Content Based Routing (CBR-Beispiel) wie im SDK. Sie können diese here anzeigen.

Ich habe dies versucht und die Orchestrierung vollständig entfernt (es ist wirklich nicht erforderlich). Es gibt jedoch schwerwiegende Routing-/Subskriptionsfehler, und bei weiteren Untersuchungen scheint es, dass Sie dies nicht tun können, wenn Sie über Solicit-Response-Ports verfügen. Einige Artikel dazu here. Ich habe ziemlich genau das gleiche Problem this Benutzer tut.

Am Ende ist es mir egal, ob ich eine Orchestrierung verwende oder nicht. Ich brauche jedoch eine Lösung, in der ich die Nachricht an mehrere Sende-Ports weitergeben kann, und ich kann nur eine tatsächlich die Nachricht verwenden und senden. Dies ist erforderlich, damit ich Ports leicht bearbeiten und hinzufügen kann, ohne etwas anderes oder harte Code-Entscheidungen in die Orchestrierung ändern zu müssen.

Antwort

1

Ich fand, dass das CBR-Beispielmodell tatsächlich funktioniert. Das Problem mit dem Routing waren die Abonnements. Wenn ich einen Sendeport zu einem Solicit-Response-Port abonnieren wollte, musste ich den BTS.SPName-Filter (Send Port Name) anstelle des BTS.ReceivePort-Filters setzen. Dadurch wurde die Nachricht korrekt gefiltert. Deine Antwort hätte auch funktioniert, aber es erfordert eine Orchestrierung, die ich vermeiden wollte.

5

Sie können Direct Binding auf dem Sendport der Orchestrierung verwenden, um die Nachricht wieder in das Meldungsfeld db einzufügen. Wenn mehrere Portgruppen verwendet werden, kann jede Portgruppe den gewünschten Nachrichtentyp direkt abonnieren und nach den Eigenschaften für die Weiterleitung filtern.

+0

In gewisser Weise habe ich eine Lösung gefunden. Ich entfernte die Orchestrierung, förderte Eigenschaften und auf dem zweiten und dritten Hafen, setze Filter, in denen ich BTS.SPName definierte (der ich dachte, dass Name der gespeicherten Prozedur aber jetzt verstanden ist Send Port Name). Die Routingprobleme waren, weil ich sie nicht vollständig abonniert hatte. – achinda99