2016-12-19 4 views
0

Ich konvertiere eine Anwendung, die MSMQ verwendet, um eine Schnittstelle mit Adaptern zu verwenden, als mit MSMQ- oder Service Bus-Warteschlangen (entweder für lokale oder Azure-Versionen). Eine der Anwendungen von MSMQ war eine Konfigurationsinspektor-Funktion, um festzustellen, ob das System über die erforderlichen Berechtigungen zum Ausführen bestimmter Aktionen verfügt. Es verwendet System.Messaging.MessageQueue.CanRead, um zu überprüfen, ob wir eine bestimmte Warteschlange erfolgreich lesen können, die für die Anwendung wichtig ist (es war eine häufige Sicherheitsfehlkonfiguration von Kunden).Was ist Service Bus entspricht MSMQ CanRead?

Das beste Äquivalent in Service Bus ist mir nicht ersichtlich. Mein erster Gedanke zu einem Ansatz wäre, versuchen, QueueClient.Peek() und alle folgenden Ausnahmen zu fangen. Die Peek-Methode bietet keinen Timeout-Parameter, daher kann ich nur hoffen, dass dies schnell geschieht. Ich würde es vorziehen, eine Zeitüberschreitung zu verwenden, so dass ich sie in dem wahrscheinlichen Szenario, in dem momentan keine Nachrichten zu lesen sind, schnell zurückbringen kann. Es gibt Receive(TimeSpan serverWaitTime), wo ich in einer winzigen Wartezeit übergeben kann, aber ich denke, dass würde ich eine Transaktion verwenden und abbrechen müssen, wenn ich zufällig eine Nachricht erhalte. Das würde die Warteschlange sperren, wenn ich es lieber nicht tun würde.

Ich hoffe, es gibt eine bessere Option, die ich verpasst habe.

+0

Es gibt keine solche Funktion wie jetzt. –

+1

Wenn Sie einen Empfänger erstellen, müssen Sie die Verbindungszeichenfolge des Namespace + sas-Schlüssels angeben. Wenn Sie einen sas-Schlüssel angeben, der Leseberechtigung in der Warteschlange nicht zulässt, erhalten Sie eine Ausnahme – Thomas

+0

@Thomas, das hat gut funktioniert. Wenn Sie es als Antwort aufnehmen wollten, werde ich es als akzeptiert markieren. Entschuldigung für solch eine späte Antwort. – DannyMeister

Antwort

0

Wenn Sie eine MessageReceiver erstellen, müssen Sie die Verbindungszeichenfolge des Namespace + sas key angeben. Wenn Sie einen sas-Schlüssel angeben, der keine Leseberechtigung für die Warteschlange zulässt, erhalten Sie eine Ausnahme.