Warum verschwinden meine WCF-Nachrichten in der Warteschlange?

8

Ich habe eine transaktionale MSMQ-Warteschlange auf dem Server THOR eingerichtet. Ich kann Nachrichten von einer Workstation mit folgendem Code an diese Warteschlange senden:

%Vor%

Wenn ich jedoch versuche, eine Verbindung über WCF herzustellen, erscheinen meine Nachrichten nie in der Warteschlange. Hier ist die Konfiguration, die ich verwende:

%Vor%

Und der Code:

%Vor%

Ich bekomme keine Ausnahmen, aber es gibt keine Nachricht in der Warteschlange auf THOR. Irgendwelche Ideen? Ich weiß nicht einmal, wie ich das debuggen kann, da es nur im Stillen fehlschlägt.

AKTUALISIEREN

Wenn ich meinen MSMQ-URI in 'net.msmq: // localhost / private / myqueue' ändere, wird er in eine lokale Transaktionswarteschlange gestellt, die ich eingerichtet habe. Die Einrichtung der Warteschlange selbst ist identisch (ich habe dieselben Schritte ausgeführt, um sowohl die localhost- als auch die THOR-Warteschlangen zu erstellen).

    
AgileJon 05.10.2010, 15:55
quelle

5 Antworten

3

Ich glaube, wenn Sie Ihre Queue-Transaktion auf der MSMQ-Server-Seite machen, müssen Sie einige weitere Einstellungen in Ihrer WCF-Bindungskonfiguration angeben - versuchen Sie dies:

%Vor%

Wenn ich mich nicht irre, müssen Sie Ihrer netMsmq-Bindung die Attribute durable="true" und exactlyOnce="true" hinzufügen, damit dies funktioniert.

Es gibt ein wirklich gutes Tutorial, wie man MSMQ und WCF gut zusammenarbeiten lässt:

Tom behandelt Transaktionswarteschlangen in Teil 3 und erwähnt:

  

Das exactlyOnce="true" Attribut ist   WCF-sprechen für die Verwendung einer Transaktion   Nachrichtenwarteschlange.

durable=true bedeutet nur, dass die Nachrichten sofort auf den Datenträger geschrieben werden, anstatt sie im Serverspeicher zu belassen. Es ist langsamer, aber im Falle eines Serverabsturzes oder einer Stromunterbrechung gehen Nachrichten nicht verloren. Klassischer Kompromiss zwischen Geschwindigkeit und Zuverlässigkeit ....

Update: Da Sie "über" Maschinengrenzen hinweg gehen und Transaktions-Queue verwenden - haben Sie den DTC (Distributed Transaction Coordinator) auf allen beteiligten Maschinen überprüft? Schau dir Toms Blog Teil 3 an:

  

Überprüfen Sie die DTC-Konfiguration

     

Unsere epische Reise ist fast zu Ende.   In der Tat, wenn du noch mitspielst   Zu Hause kannst du versuchen, die   Anwendung mit der Transaktion   Warteschlangen, um zu sehen, ob es funktioniert. Wenn es ist   fehlgeschlagen, ist eine mögliche Ursache   Probleme mit Ihrem Distributed   Konfiguration des Transaktionskoordinators.   Hier sind ein paar Dinge zu versuchen:

    
marc_s 05.10.2010 16:21
quelle
1

Ich hatte das gleiche Problem. Nachdem ich alle hier aufgeführten Ideen ausprobiert hatte, suchte ich nach etwas anderem. Es stellte sich heraus, dass bei Auswahl des Sicherheitsmodus Keine die Absendereigenschaften von mir leer gelassen wurden (siehe Abbildung unten).

Diese Nachricht wird akzeptiert, wenn sie an ein localhost gesendet wird, aber vom Remote-Server abgelehnt wird.

Damit es funktioniert, haben Sie wenige Möglichkeiten:

  1. Authentifizierung aktivieren
  2. Erteilen Sie Senden Berechtigungen an das ANONYMOUS LOGON

Die erste Option ist natürlich sicherer, erfordert aber, dass MSMQ mit Active Directory-Integration installiert wird.

    
StanislawSwierc 24.11.2013 13:03
quelle
0

Ich hatte ein ähnliches Problem, also hoffe ich, dass diese Checkliste hilft:

  1. Konnektivität : Ich nehme an, dass der Thor-DNS-Eintrag funktioniert, oder? Überprüfen Sie, ob es ping ... macht
  2. Berechtigungen über verschiedene Domänen hinweg : Ich hatte Probleme mit einigen Sprints, der Grund waren Berechtigungen. Mein lokaler Testcomputer befand sich in einer anderen Domäne als der Server. Überprüfen Sie, ob sich Thor und Ihr Computer in derselben Domäne befinden. Es ist möglich, Domains über mehrere Domains zu haben, aber ich konnte es nicht funktionieren lassen (also habe ich meine Tests auf eine Maschine in derselben Domain verschoben)
  3. Warteschlangentool : Obwohl Sie Warteschlangen aus den Verwaltungstools sehen können, habe ich das Warteschlangen-Explorer-Tool gefunden ( Ссылка ). ziemlich nützlich. Sie können überprüfen, wo die Nachrichten hängen bleiben.

HINWEIS: Wahrscheinlich ist 1 in Ordnung, aber nur für den Fall, dass ich es ...

    
Oscar Foley 06.10.2010 12:22
quelle
0

Sie müssen MsmqIntegrationBinding verwenden. Die Nachrichten werden nicht erkannt und werden verworfen, da WCF nicht weiß, was sie sind.

    
Adam Fyles 11.10.2010 16:20
quelle
0

Versuchen Sie, den Transaktionsaktionsbereich abzuschließen, bevor Sie den Kanal schließen.

Wenn Sie den Kanal schließen, verlieren Sie den Kontakt mit ihm, daher hat er eine nicht festgeschriebene Transaktion, die schließlich verworfen wird.

    
Shiraz Bhaiji 05.10.2010 16:00
quelle

Tags und Links