2010-01-28 6 views
7

Ich habe einen WCF-Dienst mit der NetMsmq-Bindung erstellt, für die ich eine private Warteschlange auf meinem Computer erstellt und das Projekt ausgeführt habe. Dies funktioniert problemlos und mein WCF-Dienst wird gestartet und greift auf die Nachricht mithilfe der Warteschlange in der Debugging-Umgebung zu. Jetzt wollte ich den Dienst mit dem Windows-Dienst hosten und für denselben habe ich auch ein neues Projekt- und Windows-Installationsprogramm erstellt (Dieser Dienst wird unter Lokales Systemkonto ausgeführt). Dann habe ich versucht, diesen Windows-Dienst mit dem InstallUtil-Befehl über die Eingabeaufforderung zu installieren. Wenn die Installation geschieht, und während der Service-Host Öffnung, erhalte ich eine Ausnahme sagen:Msmq und WCF-Dienst

There was an error opening the queue. Ensure that MSMQ is installed and running, the queue exists and has proper authorization to be read from. The inner exception may contain additional information. 
Inner Exception System.ServiceModel.MsmqException: An error occurred while opening the queue:Access is denied. (-1072824283, 0xc00e0025). The message cannot be sent or received from the queue. Ensure that MSMQ is installed and running. Also ensure that the queue is available to open with the required access mode and authorization. 
    at System.ServiceModel.Channels.MsmqQueue.OpenQueue() 
    at System.ServiceModel.Channels.MsmqQueue.GetHandle() 
    at System.ServiceModel.Channels.MsmqQueue.SupportsAccessMode(String formatName, Int32 accessType, MsmqException& msmqException) 

Könnte jemand die mögliche Lösung für das obige Problem vorschlagen? Fehlen mir Berechtigungen für die Warteschlange und den Windows-Dienst? Wenn ja, könnten Sie vorschlagen, wo diese Berechtigungen hinzugefügt werden sollen?

Antwort

4

Ja, es sieht wie ein Berechtigungsproblem aus.

Klicken Sie mit der rechten Maustaste auf Ihre private Warteschlange im Server-Manager und wählen Sie Eigenschaften. Fahren Sie mit der Registerkarte Sicherheit fort und stellen Sie sicher, dass Sie dort die richtigen Berechtigungen für Ihr lokales Systemkonto haben.

Dies wird auch in Nicholas Allen Artikel bestätigt: Diagnosing Common Queue Errors, wo der Autor den Fehlercode 0xC00E0025 als ein Problem mit Berechtigungen definiert.

+0

Danke für die Antwort Daniel. Ich habe versucht, alle relevanten Berechtigungen für das Computerkonto, das in der Liste vorhanden ist, wenn das ist, was als das lokale Systemkonto bezeichnet wird. Aber ich bekomme den gleichen Fehler. Die private Warteschlange, die erstellt wurde, hat meine Domänenanmeldung als ihren Besitzer. Ich habe keine Ahnung, auf welche Berechtigungen ich einstellen muss. Könnten Sie vorschlagen, ob noch eine andere mögliche Erlaubnis fehlt? – Sowmya

+0

Sowmya, hast du es funktioniert? Wenn nicht, dann überprüfen Sie diesen Link http://beyondrelational.com/blogs/ibhadelia/archive/2011/06/21/an-error-ccurred-while-opening-the-queue-access-is-denied-msmq-exception. aspx – IBhadelia

2

Ich lief in das gleiche Problem, hier ist die Lösung.

Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz" -> Verwalten. Gehen Sie im Fenster Computerverwaltung zu "Dienste und Anwendungen -> Message Queuing -> ur queue", wählen Sie Ihre Warteschlange aus und greifen Sie auf die Eigenschaften zu. Fügen Sie den Benutzer hinzu, der Ihre WCF-Anwendung ausführt, und gewähren Sie vollen Zugriff. Dies sollte das Problem lösen.

0

Kann einfach sein, dass der Dienst die Warteschlange nicht finden kann. Der Name der Warteschlange muss genau mit der Endpunktadresse übereinstimmen.

Beispiel:

net.msmq: //localhost/private/wf.listener_srv/service.svc

Punkte auf lokale Warteschlange

private \ wf $. listener_srv \ service.svc

Wenn Warteschlange Name und Endpunkt sind Daher ist es am ähnlichsten, dass die in IIS pool definierten Anmeldeinformationen keinen Zugriff auf die Warteschlange gewähren.