2010-10-28 9 views
15

Obwohl meine Frage an einige ähnlich sieht schon auf SO gefunden, jene Post nicht mir geholfen hat, so ist es hier:MSMQ Nachrichten werden in der Outgoing Warteschlange

Gegeben:

  • Zwei Maschinen auf das gleiche Segment (natürlich in der gleichen Domäne, tatsächlich auf dem gleichen Schreibtisch)
  • Beide Maschinen sind Windows 7 Workstations
  • Beide Maschinen jedes oth deaktiviert Firewall
  • Beide Maschinen sehen haben er (ping funktioniert)
  • Es gibt eine private nicht transaktionale Nachrichtenwarteschlange Test auf einer von ihnen.
  • Der Sender Maschine hat HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\SimpleClient\@BinaryEnabled = 'Yes'
  • Die Warteschlange Eigentümer eine Nachricht von einem anderen Rechner senden
  • Die Meldung auf der ausgehenden Warteschlange stecken, nie das Ziel zu erreichen.
  • Wenn die Nachricht von demselben Computer (d. H. Lokal) gesendet wird, wird sie als OK angezeigt.

Die Nachricht wird gesendet, um den folgenden Code:

var q = new MessageQueue(@"FormatName:Direct=OS:il-mark-lap\private$\test"); 
q.Send(string.Format("Test message sent at {0} from {1}", DateTime.Now, Environment.MachineName)); 

Wo il-mark-lap ist die Adresse der Maschine mit der Warteschlange.

Was um alles in der Welt muss ich tun, damit die Sache funktioniert?

Vielen Dank.

+0

ich das gleiche Problem konfrontiert bin. Mark, hast du jemals den Grund dafür gefunden? – user923849

+0

Ich kann mich jetzt nicht erinnern. Anyway msmq hat gazillion Probleme, so dass wir es einfach aufgegeben haben. Mein Rat - bleib fern davon. – mark

+0

Ich habe ein Kopfgeld hinzugefügt, da wir das gleiche Problem haben. Die Nachrichten sitzen nur in der ausgehenden Warteschlange, auch wenn DIRECT = TCP verwendet wird. – 79E09796

Antwort

1

Normalerweise können private Warteschlangen in einem LAN Nachrichten untereinander senden. Aber manchmal ist eine private Warteschlange möglicherweise nicht erreichbar und veranlasst andere ausgehende Warteschlangen zu erstellen ... Ich weiß nicht warum.

+1

Ausgehende Warteschlangen werden immer erstellt. – BlackICE

8

Ich denke, ich fand die Antwort auf dieses Problem, ich hatte, was scheint, das gleiche Problem zu sein, meins nur stecken, nachdem keine Nachrichten an den Client für 10 Minuten obwohl. Werfen Sie einen Blick auf diesen KB-Artikel, es kann Ihnen helfen. Außerdem hatte es in meinem Fall nichts mit dem Neustart zu tun, also lass dich nicht davon abbringen, ich habe die Symptome im netstat gezeigt und die Nachrichten würden zuerst durchgehen, wenn der Client das erste Mal gestartet wurde.

http://support.microsoft.com/kb/2554746

+0

Wir haben lange entschieden, MSMQ zu verlassen. Danke trotzdem. – mark

5

ich nur mit dem Problem beschäftigt, hier sind die Schritte, die ich um nahm es zu lösen:

das DTCPing Dienstprogramm von Microsoft erhalten, führen Sie es an den Maschinen, die MSMQ verwenden, die DTCs müssen miteinander kommunizieren können, damit MSMQ funktioniert.

Troubleshooting MSDTC issues with the DTCPing tool

Dies wiederum machte mir klar, dass MSMQ auf NetBIOS-Namen abhängig ist - die Maschinen müssen in der Lage sein, sich gegenseitig ping von NetBIOS-Namen allein.

Sobald dies erledigt ist, stellen Sie sicher, dass Sie alle Message Queuing-Dienste neu starten (sowohl auf dem sendenden Computer als auch auf dem Zielcomputer, da es eine umgekehrte NetBIOS-Operation ausführen muss).

In meinem Fall, sobald ich das DTC ging mit NetBIOS Namensauflösung - Neustart der Dienste - alles begann magisch zu arbeiten.

Ich empfehle dringend, dass Sie this page für zusätzliche Ressourcen besuchen.

+1

Wir haben lange auf MSMQ (gut), .NET (so-so) und C# (seufz!) Zugunsten von Java verzichtet (:-(). Aber danke trotzdem. – mark

+0

Für mich war es wichtig, dass beide Maschinen pingen können Mit Hilfe des NetBIOS-Namens THX – xhafan

1

Die Antwort ist einfach zu beenden. Stellen Sie sicher, dass Sie die Ports 1801,135,2103 & 2105 sowohl von der Quellmaschine zum Ziel als auch umgekehrt telnet. Stellen Sie außerdem sicher, dass MSMQ auf beiden Computern ausgeführt wird.

6

Ich hatte dieses Problem heute. Um das Problem zu lösen, mussten wir das Dialogfeld Message Queuing-Eigenschaften des empfangenden Servers öffnen und auf der Registerkarte Server-Sicherheit das Kontrollkästchen "Nicht authentifizierte RPC-Aufrufe deaktivieren" deaktivieren. Außerdem in der privaten Warteschlange Eigenschaften | Auf der Registerkarte Sicherheit haben wir die Sicherheit so geändert, dass sie Jeder Vollzugriff gewährt. In meinem Fall befinden sich die Maschinen auf demselben Segment, aber nicht auf derselben Domäne. Die Warteschlange ist nicht transaktional. Wir verwenden IP-Adressen für die Endpunktbindungen (WCF), NetBIOS/DNS ist nicht im Spiel.

+0

Danke.Nachdem ich Stunden damit verbracht habe, ein ähnliches Problem zu lösen (mein MSMQ war öffentlich und transaktional) half nichts. "Deaktivieren nicht authentifizierter RPC-Aufrufe" war der Fix. – geedubb

+0

Wir haben das gleiche Problem gesehen "Deaktivieren nicht authentifizierter RPC-Aufrufe" wurde aktiviert. Wenn Sie diese Option deaktivieren, wurde das Problem umgangen. Wir vermuten, dass die Ursache eine Änderung auf Netzwerkebene ist. Diese Änderung hat jedoch sofort funktioniert. Alle ausgehenden Warteschlangen haben ihre Nachrichten sofort gesendet ihre Ziel-Warteschlangen –

3

Ich hatte ein Problem, wo wir 2 Server hatten, die Nachrichten an einen Dritten senden. Nur die Nachrichten eines Servers wurden empfangen. Die Nachrichten von dem anderen steckten in der ausgehenden Warteschlange als "unbestätigt".

Das Problem lag daran, dass alle Computer geklonte VMs waren und dieselbe QMId im Registrierungsschlüssel hatten: HKLM \ Software \ Microsoft \ MSMQ \ Parameters \ Machine Cache. Wir haben MSMQ auf den Servern neu installiert, die das Problem behoben haben.

Referenzen:

http://baleinoid.com/whaly/2012/08/random-bug-msmq-unacknowledged-messages/ http://blogs.msdn.com/b/johnbreakwell/archive/2007/02/06/msmq-prefers-to-be-unique.aspx

+0

Das hat mir geholfen, danke! – Martin

Verwandte Themen