Problembehandlung bei NachrichtenwarteschlangenTroubleshooting Queued Messaging

Dieser Abschnitt enthält allgemeine Fragen und Problembehandlung bei der Verwendung von Warteschlangen in Windows Communication Foundation (WCF).This section contains common questions and troubleshooting help for using queues in Windows Communication Foundation (WCF).

Allgemeine FragenCommon Questions

F: verwendet WCF Beta 1, und ich den MSMQ-Hotfix installiert.Q: I used WCF Beta 1 and I installed the MSMQ hotfix. Muss ich den Hotfix entfernen?Do I need to remove the hotfix?

A: Ja.A: Yes. Dieser Hotfix wird nicht mehr unterstützt.This hotfix is no longer supported. WCF unterstützt jetzt auch ohne Hotfix auf MSMQ.WCF now works on MSMQ without a hotfix requirement.

F: stehen zwei Bindungen für MSMQ: NetMsmqBinding und MsmqIntegrationBinding.Q: There are two bindings for MSMQ: NetMsmqBinding and MsmqIntegrationBinding. Welche sollte ich wann verwenden?What should I use and when?

A: verwenden die NetMsmqBinding Wenn Sie MSMQ als Transport für eine warteschlangenkommunikation zwischen zwei WCF-Anwendungen verwenden möchten.A: Use the NetMsmqBinding when you want to use MSMQ as a transport for queued communication between two WCF applications. Verwenden Sie die MsmqIntegrationBinding Wenn Sie vorhandene MSMQ-Anwendungen, die zur Kommunikation mit neuen WCF-Anwendungen verwenden möchten.Use the MsmqIntegrationBinding when you want to use existing MSMQ applications to communicate with new WCF applications.

F: habe ich MSMQ zu verwenden, Aktualisieren der NetMsmqBinding und MsmqIntegration Bindungen?Q: Do I have to upgrade MSMQ to use the NetMsmqBinding and MsmqIntegration bindings?

A: "Nein".A: No. Beide Bindungen funktionieren mit MSMQ 3.0 unter Windows XPWindows XP und Windows Server 2003Windows Server 2003.Both bindings work with MSMQ 3.0 on Windows XPWindows XP and Windows Server 2003Windows Server 2003. Bestimmte Funktionen der Bindungen werden verfügbar, wenn Sie in Windows VistaWindows Vista ein Upgrade auf MSMQ 4.0 ausführen.Certain features of the bindings become available when you upgrade to MSMQ 4.0 in Windows VistaWindows Vista.

F: welche Funktionen von der NetMsmqBinding und MsmqIntegrationBinding -Bindung sind in MSMQ 4.0 jedoch nicht in MSMQ 3.0 verfügbar?Q: What features of the NetMsmqBinding and MsmqIntegrationBinding bindings are available in MSMQ 4.0 but not in MSMQ 3.0?

A: die folgenden Funktionen sind in MSMQ 4.0 jedoch nicht in MSMQ 3.0 verfügbar:A: The following features are available in MSMQ 4.0 but not in MSMQ 3.0:

  • Benutzerdefinierte Warteschlange für unzustellbare Nachrichten wird nur in MSMQ 4.0 unterstützt.Custom dead-letter queue is supported only on MSMQ 4.0.

  • In MSMQ 3.0 und 4.0 werden nicht verarbeitbare Nachrichten unterschiedlich behandelt.MSMQ 3.0 and 4.0 handle poison messages differently.

  • Nur MSMQ 4.0 unterstützt remote durchgeführte Lesevorgänge.Only MSMQ 4.0 supports remote transacted read.

Weitere Informationen finden Sie unter Unterschiede in Queuing-Funktionen in Windows Vista, Windows Server 2003 und Windows XP.For more information, see Differences in Queuing Features in Windows Vista, Windows Server 2003, and Windows XP.

F: kann ich MSMQ 3.0 auf einer Seite der warteschlangenkommunikation und MSMQ 4.0 auf der anderen Seite verwenden?Q: Can I use MSMQ 3.0 on one side of a queued communication and MSMQ 4.0 on the other side?

A: Ja.A: Yes.

F: neuen WCF-Clients oder Server vorhandene MSMQ-Anwendungen integriert werden soll.Q: I want to integrate existing MSMQ applications with new WCF clients or servers. Muss ich beide Seiten der MSMQ-Infrastruktur aktualisieren?Do I need to upgrade both sides of my MSMQ infrastructure?

A: "Nein".A: No. Sie müssen keine Seite auf MSMQ 4.0 aktualisieren.You do not have to upgrade to MSMQ 4.0 on either side.

ProblembehandlungTroubleshooting

Dieser Abschnitt enthält Informationen zur Behandlung der häufigsten Probleme.This section contains answers to most common troubleshooting issues. Bei einigen Fragen handelt es sich um bekannte Einschränkungen, die auch in den Releasehinweisen erläutert werden.Some issues that are known limitations are also described in the release notes.

F: ich versuche, eine private Warteschlange verwenden und erhalte ich mit folgenden Ausnahme: System.InvalidOperationException: die URL ist ungültig.Q: I am trying to use a private queue and I get the following exception: System.InvalidOperationException: The URL is invalid. Die URL für die Warteschlange darf das Zeichen '$' nicht enthalten.The URL for the queue cannot contain the '$' character. Verwenden Sie die Syntax in net.msmq://machine/private/queueName, um eine private Warteschlange anzugeben.Use the syntax in net.msmq://machine/private/queueName to address a private queue.

A: überprüfen Sie die Warteschlange Uniform Resource Identifier (URI) in der Konfiguration und Code.A: Please check the queue Uniform Resource Identifier (URI) in your configuration and code. Verwenden Sie kein "$"-Zeichen im URI.Do not use the "$" character in the URI. Geben Sie z. B. zur Adressierung einer privaten Warteschlange mit dem Namen OrdersQueue den URI als net.msmq://localhost/private/ordersQueue an.For example, to address a private queue named OrdersQueue, specify the URI as net.msmq://localhost/private/ordersQueue.

F: Aufrufen ServiceHost.Open() für meine in der Warteschlange stehende Anwendung löst eine die folgende Ausnahme: System.ArgumentException: eine Basisadresse darf keine URI-Abfragezeichenfolge enthalten.Q: Calling ServiceHost.Open() on my queued application throws the following exception: System.ArgumentException: A base address cannot contain a URI query string. Warum?Why?

A: überprüfen Sie den Warteschlangen-URI in der Konfigurationsdatei und im Code.A: Check the queue URI in your configuration file and in your code. Zwar wird in MSMQ-Warteschlangen die Verwendung von Fragezeichen ("?") unterstützt, diese werden von URIs jedoch als Beginn einer Zeichenfolgenabfrage interpretiert.While MSMQ queues support the use of the '?' character, URIs interpret this character as the beginning of a string query. Verwenden Sie deshalb Warteschlangennamen ohne Fragezeichen, um dieses Problem zu umgehen.To avoid this issue, use queue names that do not contain '?' characters.

F: Sendevorgang war erfolgreich, jedoch wird beim Empfänger kein Dienstvorgang aufgerufen.Q: My send succeeded but no service operation is invoked on the receiver. Warum?Why?

A: absolvieren, um die Antwort zu bestimmen, die folgende Liste:A: To determine the answer, work through the following check list:

  • Überprüfen Sie, ob die Anforderungen der Transaktionswarteschlange mit den angegebenen Zusicherungen kompatibel sind.Check that the transactional queue requirements are compatible with the assurances specified. Beachten Sie die folgenden Prinzipien:Note the following principles:

    • Sie können senden permanente Nachrichten (Datagramme und Sitzungen) mit "genau einmal"-zusicherungen (ExactlyOnce = true) nur an eine transaktionale Warteschlange.You can send durable messages (datagrams and sessions) with "exactly once" assurances (ExactlyOnce = true) only to a transactional queue.

    • Sitzungen können nur mit "genau einmal"-Zusicherungen gesendet werden.You can send sessions only with "exactly once" assurances.

    • Eine Transaktion ist erforderlich, um Nachrichten in einer Sitzung von einer Transaktionswarteschlange zu empfangen.A transaction is required to receive messages in a session from a transactional queue.

    • Sie können senden oder Empfangen von temporäre oder permanente Nachrichten (nur Datagramme) ohne zusicherungen (ExactlyOnce = false) nur an eine nicht transaktionale Warteschlange.You can send or receive volatile or durable messages (datagrams only) with no assurances (ExactlyOnce = false) only to a non-transactional queue.

  • Überprüfen Sie die Warteschlange für unzustellbare Nachrichten.Check the dead-letter queue. Wenn Sie die Nachrichten dort finden, stellen Sie fest, warum sie nicht zugestellt wurden.If you find the messages there, determine why they were not delivered.

  • Überprüfen Sie die ausgehenden Warteschlangen auf Konnektivitäts- oder Adressierungsprobleme.Check the outgoing queues for connectivity or addressing problems.

F: ich eine benutzerdefinierte Warteschlange für unzustellbare angegeben haben, aber wenn ich die absenderanwendung zu starten, erhalte ich eine Ausnahme, die entweder an die Dead Letter-Warteschlange nicht gefunden wird, oder die sendende Anwendung hat keine Berechtigung für die Dead Letter-Warteschlange.Q: I have specified a custom dead-letter queue, but when I start the sender application, I get an exception that either the dead-letter queue is not found, or the sending application has no permission to the dead-letter queue. Warum geschieht das?Why is this happening?

A: die benutzerdefinierte Warteschlange für unzustellbare URI muss ein "Localhost" oder den Computernamen in das erste Segment, z. B. MSMQ://localhost/private/meineunzustwarteschlange enthalten.A: The custom dead-letter queue URI must include a "localhost" or the computer name in the first segment, for example, net.msmq://localhost/private/myAppdead-letter queue.

F: ist es immer erforderlich ist, eine benutzerdefinierte Warteschlange für unzustellbare definieren, oder gibt es eine standardmäßige Warteschlange für unzustellbare?Q: Is it always necessary to define a custom dead-letter queue, or is there a default dead-letter queue?

A: Wenn "genau einmal"-zusicherungen (ExactlyOnce = true), und wenn Sie eine benutzerdefinierte Warteschlange für unzustellbare nicht angeben, wird der Standardwert ist eine systemweite transaktionale Dead Letter-Warteschlange.A: If assurances are "exactly once" (ExactlyOnce = true), and if you do not specify a custom dead-letter queue, the default is a system-wide transactional dead-letter queue.

Wenn zusicherungen (ExactlyOnce = false), wird standardmäßig keine Funktionalität Dead Letter-Warteschlange.If assurances are none (ExactlyOnce = false), then the default is no dead-letter queue functionality.

F: Mein Dienst löst bei Svchost.Open Ausnahme mit der eine Nachricht "EndpointListener-Anforderungen können nicht erfüllt werden durch die ListenerFactory".Q: My service throws on SvcHost.Open with a message "EndpointListener requirements cannot be met by the ListenerFactory". Warum?Why?

A.A. Überprüfen Sie den Dienstvertrag.Check your service contract. Sie möglicherweise haben Sie vergessen "IsOneWay =true" für alle Dienstvorgänge.You may have forgotten to put "IsOneWay=true" on all the service operations. Warteschlangen unterstützen nur unidirektionale Dienstvorgänge.Queues support only one-way service operations.

F: Nachrichten in der Warteschlange vorhanden sind, aber kein Dienstvorgang aufgerufen wird.Q: There are messages in the queue but no service operation is invoked. Wo liegt das Problem?What is the problem?

A: zu bestimmen, ob der Diensthost fehlerhaft ist.A: Determine if your service host is faulted. Sie können das feststellen, indem Sie die Ablaufverfolgung überprüfen oder IErrorHandler implementieren.You can check by looking at the trace or implementing IErrorHandler. Der Diensthost schlägt standardmäßig fehl, wenn eine nicht verarbeitbare Nachrichten erkannt wird.Service host faults, by default, if a poison message is detected.

F: Nachrichten in der Warteschlange vorhanden sind, aber in der Warteschlange im Internet gehosteten Dienst ist nicht aktiviert.Q: There are messages in the queue but my Web-hosted queued service is not getting activated. Warum?Why?

A: der häufigste Grund ist die Berechtigungen.A: The most common reason is permissions.

  1. Stellen Sie sicher, dass der NetMsmqActivator-Prozess ausgeführt wird und die Identität des NetMsmqActivator-Prozesses Lese- und Suchberechtigungen für die Warteschlange besitzt.Ensure that the NetMsmqActivator process is running and the identity of the NetMsmqActivator process is given read and seek permission on the queue.

  2. Wenn NetMsmqActivator Warteschlangen auf einem Remotecomputer überwacht, stellen Sie sicher, dass NetMsmqActivator unter keinem eingeschränkten Token ausgeführt wird.If the NetMsmqActivator is monitoring queues on a remote machine, ensure that NetMsmqActivator does not run under a restricted token. So führen Sie NetMsmqActivator mit einem uneingeschränkten Token aus:To run the NetMsmqActivator with an unrestricted token:

    sc sidtype NetMsmqActivator unrestricted  
    

Nicht sicherheitsrelevantes verwandte Web hostprobleme finden Sie unter: Webhosting einer Anwendung in der Warteschlange.For non-security related Web host issues refer to: Web Hosting a Queued Application.

F: was die einfachste Möglichkeit, Access-Sitzungen ist?Q: What is the easiest way to access sessions?

A: AutoVervollständigen festgelegt =true auf den Vorgang, der dem letzten Nachricht in der Sitzung, und legen Sie AutoComplete =false für alle verbleibenden Dienstvorgänge.A: Set AutoComplete=true on the operation that corresponds to the last message in the session, and set AutoComplete=false on all remaining service operations.

F: Wo finde ich Antworten auf häufig gestellte Fragen zu MSMQ?Q: Where can I find answers to common questions on MSMQ?

A: finden Sie weitere Informationen zu MSMQ, Microsoft Message Queuing.A: For more information about MSMQ, see Microsoft Message Queuing.

F: Warum löst der Dienst eine ProtocolException beim Lesen aus einer Warteschlange, die sowohl sitzungsnachrichten und datagrammnachrichten in Warteschlangen?Q: Why does my service throw a ProtocolException when reading from a queue that contains both queued session messages and queued datagram messages?

A: es ist ein wesentlicher Unterschied in der sitzungsnachrichten und Datagrammnachricht Nachrichten bestehen aus.A: There is a fundamental difference in the way queued session messages and queued datagram messages are composed. Deshalb kann ein Dienst, der eine Sitzungsnachricht in einer Warteschlange lesen soll, keine Datagrammnachricht empfangen, und kann ein Dienst, der eine Datagrammnachricht in einer Warteschlange lesen soll, keine Sitzungsnachricht empfangen.Because of this, a service that is expecting to read a queued session message cannot receive a queued datagram message and a service expecting to read a queued datagram message cannot receive a session message. Bei dem Versuch, beide Nachrichtentypen in derselben Warteschlange zu lesen, wird die folgende Ausnahme ausgelöst:Attempting to read both types of messages from the same queue throws the following exception:

System.ServiceModel.MsmqPoisonMessageException: The transport channel detected a poison message. This occurred because the message exceeded the maximum number of delivery attempts or because the channel detected a fundamental problem with the message. The inner exception may contain additional information.   
---> System.ServiceModel.ProtocolException: An incoming MSMQ message contained invalid or unexpected .NET Message Framing information in its body. The message cannot be received. Ensure that the sender is using a compatible service contract with a matching SessionMode.  

Bei der systemweiten Warteschlange für unzustellbare Nachrichten und auch bei benutzerdefinierten Warteschlangen für unzustellbare Nachrichten tritt dieses Problem schnell auf, wenn eine Anwendung Sitzungsnachrichten und Datagrammnachrichten in Warteschlangen vom selben Computer aus sendet.The system dead-letter queue, as well as any custom dead-letter queue, is particularly susceptible to this issue if an application sends both queued session messages and queued datagram messages from the same computer. Wenn eine Nachricht nicht erfolgreich gesendet werden kann, wird sie in die Warteschlange für unzustellbare Nachrichten verschoben.If a message cannot be sent successfully, it is moved to the dead-letter queue. Aus diesem Grund kann es vorkommen, dass sich sowohl Sitzung- als auch Datagrammnachrichten in der Warteschlange für unzustellbare Nachrichten befinden.Under these circumstances, it is possible to have both session and datagram messages in the dead-letter queue. Es gibt keine Möglichkeit, die beiden Nachrichtentypen beim Lesen einer Warteschlange zur Laufzeit zu trennen. Deshalb sollten Anwendungen Sitzungsnachrichten und Datagrammnachrichten in Warteschlangen nicht vom selben Computer aus senden.There is no way to separate both types of messages at runtime when reading from a queue, therefore, applications should not send both queued session messages and queued datagram messages from the same computer.

MSMQ-Integration: Spezielle ProblembehandlungMSMQ Integration: Specific Troubleshooting

F: , wenn eine Nachricht zu senden, oder wenn ich den Diensthost öffne, erhalte ich die eine Fehlermeldung, der angibt, das Schema falsch ist.Q: When I send a message, or when I open the service host, I get an error that indicates the scheme is wrong. Warum?Why?

A: Wenn Sie die Bindung für die MSMQ-Integration verwenden, müssen Sie das msmq.formatname-Schema verwenden.A: When you use the MSMQ integration binding, you must use the msmq.formatname scheme. Beispiel: msmq.formatname:DIRECT=OS:.\private$\OrdersQueue.For example, msmq.formatname:DIRECT=OS:.\private$\OrdersQueue. Wenn Sie jedoch die benutzerdefinierte Warteschlange für unzustellbare Nachrichten angeben, müssen Sie das net.msmq-Schema verwenden.But when you specify the custom dead-letter queue, you must use the net.msmq scheme.

F: Wenn ich einen öffentlichen oder privaten Formatnamen verwenden, und Öffnen des Diensthosts auf Windows VistaWindows Vista, eine Fehlermeldung.Q: When I use a public or private format name and open the service host on Windows VistaWindows Vista, I get an error. Warum?Why?

A: auf den WCF-Integrationskanal Windows VistaWindows Vista prüft, ob eine Unterwarteschlange kann, für die Hauptassembly der Anwendungswarteschlange geöffnet werden für unzustellbare Nachrichten zu verarbeiten.A: The WCF integration channel on Windows VistaWindows Vista checks to see if a sub-queue can be opened for the main application queue for handling poison messages. Der Name der untergeordneten Warteschlange wird von einem an den Listener übergebenen msmq.formatname-URI abgeleitet.The sub-queue name is derived from an msmq.formatname URI passed to the listener. Der Name der untergeordneten Warteschlange kann in MSMQ nur ein direkter Formatname sein.The sub-queue name in MSMQ can only be a direct format name. Deshalb tritt der Fehler auf.So you see the error. Ändern Sie den Warteschlangen-URI in einen direkten Formatnamen.Change the queue URI to a direct format name.

F: beim Empfang einer Nachricht aus einer MSMQ-Anwendung wird die Nachricht in der Warteschlange befindet und nicht von der empfangenden WCF-Anwendung gelesen wird.Q: When receiving a message from an MSMQ application, the message sits in the queue and is not read by the receiving WCF application. Warum?Why?

A: Kontrollkästchen, um festzustellen, ob die Nachricht einen Text enthält.A: Check to see whether the message has a body. Ohne Nachrichtentext ignoriert der MSMQ-Integrationskanal die Nachricht.If the message has no body, the MSMQ integration channel ignores the message. Implementieren Sie IErrorHandler, um bei Ausnahmen benachrichtigt zu werden, und überprüfen Sie die Ablaufverfolgungen.Implement IErrorHandler to be notified of exceptions and check the traces.

F: beim Ausführen des Beispiels, die eine standardbindung im Arbeitsgruppenmodus verwendet wird, werden Nachrichten scheinbar gesendet, kommen jedoch nie beim Empfänger empfangen werden.Q: When I run the sample that uses a default binding in workgroup mode, messages seem to get sent but are never received by the receiver.

A: standardmäßig Nachrichten signiert werden mit einem internen MSMQ-Zertifikat, die die Active Directory-Verzeichnisdienst erforderlich sind.A: By default, messages are signed using an MSMQ internal certificate that requires the Active Directory directory service. Da Active Directory im Arbeitsgruppenmodus nicht verfügbar ist, verursacht das Signieren der Nachricht einen Fehler.In workgroup mode, because Active Directory is not available, signing the message fails. Daher kommt die Nachricht in die Dead Letter-Warteschlange sowie Fehlerursache, z. B. "Ungültige Signatur" angegeben werden.So the message lands in the dead-letter queue and failure cause, such as "Bad signature", is indicated.

Sie können das Problem beheben, indem Sie die Sicherheit deaktivien.The workaround is to turn off security. Dies erfolgt durch Festlegen von Mode = None im Arbeitsgruppenmodus funktionieren.This is done by setting Mode = None to make it work in workgroup mode.

Eine weitere Möglichkeit besteht darin, MsmqTransportSecurity aus der Transport-Eigenschaft abzurufen und auf Certificate festzulegen und dann das Clientzertifikat festzulegen.Another workaround is to get the MsmqTransportSecurity from the Transport property and set it to Certificate, and set the client certificate.

Sie können das Problem auch beheben, indem Sie MSMQ mit Active Directory-Integration installieren.Yet another workaround is to install MSMQ with Active Directory integration.

F: beim Senden einer Nachricht mit standardbindung (bei aktivierter transportsicherheit) in Active Directory an eine Warteschlange, die Meldung "Internes Zertifikat wurde nicht gefunden".Q: When I send a message with default binding (transport security turned on) in Active Directory to a queue, I get an "internal certificate not found" message. Wie kann ich das Problem beheben?How do I fix this?

A: Dies bedeutet, dass das Zertifikat in Active Directory für den Absender erneuert werden muss.A: This means that the certificate in Active Directory for the sender must be renewed. Öffnen Sie hierzu Systemsteuerung, Verwaltung, Computerverwaltung, mit der rechten Maustaste MSMQ, und wählen Sie Eigenschaften.To do so, open Control Panel, Administrative Tools, Computer Management, right-click MSMQ, and select Properties. Wählen Sie die Benutzerzertifikat Registerkarte, und klicken Sie auf die erneuern Schaltfläche.Select the User Certificate tab and click the Renew button.

F: beim Senden einer Nachricht mit Certificate und das zu verwendende Zertifikat angeben, die Meldung "Ungültiges Zertifikat".Q: When I send a message using Certificate and specify the certificate to use, I get an "Invalid certificate" message. Wie kann ich das Problem beheben?How do I fix this?

A: einen Zertifikatspeicher des lokalen Computers mit zertifikatmodus nicht verwendet werden können.A: You cannot use a local machine certificate store with certificate mode. Sie müssen das Zertifikat mit dem Zertifikat-Snap-In aus dem Zertifikatspeicher des Computers in den Speicher des aktuellen Benutzers kopieren.You have to copy the certificate from the machine certificate store to the current user store using the Certificate snap-in. So rufen Sie das Zertifikat-Snap-In auf:To get the Certificate snap-in:

  1. Klicken Sie auf startenOption ausführen, Typ mmc, und klicken Sie auf OK.Click Start, select Run, type mmc, and click OK.

  2. In der Microsoft Management Consoleöffnen die Datei Menü Snap-In hinzufügen/entfernen.In the Microsoft Management Console, open the File menu and select Add/Remove Snap-in.

  3. In der Snap-In hinzufügen/entfernen (Dialogfeld), klicken Sie auf die hinzufügen Schaltfläche.In the Add/Remove Snap-in dialog box, click the Add button.

  4. In der Standalone-Snap-in hinzufügen (Dialogfeld), wählen Sie Zertifikate und klicken Sie auf hinzufügen.In the Add Standalone Snap-in dialog box, select Certificates and click Add.

  5. In der Zertifikate wählen Sie im Snap-in-Dialogfeld eigenes Benutzerkonto , und klicken Sie auf Fertig stellen.In the Certificates snap-in dialog box, select My user account, and click Finish.

  6. Als Nächstes fügen Sie ein zweites Zertifkat-Snap-in mit den vorherigen Schritten, aber diesmal wählen Computerkonto , und klicken Sie auf Weiter.Next, add a second Certificates snap-in using the previous steps, but this time select Computer account and click Next.

  7. Wählen Sie Sicherheitszertifikate , und klicken Sie auf Fertig stellen.Select Local Computer and click Finish. Sie können jetzt Zertifikate per Drag & Drop aus dem Computerzertifikatspeicher in den Speicher des aktuellen Benutzers verschieben.You can now drag and drop certificates from the machine certificate store to the current user store.

F: wenn mein Dienst liest aus einer Warteschlange auf einem anderen Computer im Arbeitsgruppenmodus, erhalte ich eine Ausnahme von "Zugriff verweigert".Q: When my service reads from a queue on another computer in workgroup mode, I get an "access denied" exception.

A: im Arbeitsgruppenmodus für eine Remoteanwendung für den Zugriff auf die Warteschlange muss die Anwendung über die Berechtigung, auf die Warteschlange zuzugreifen.A: In workgroup mode, for a remote application to gain access to the queue, the application must have permission to access the queue. Zugriffssteuerungsliste (ACL) für die Warteschlange "Anonyme Anmeldung" hinzu, und weisen Sie ihm die Berechtigung Lesen.Add "Anonymous login" to the queue's access control list (ACL) and give it read permission.

F: , wenn ein netzwerkdienstclient (oder jeder Client, der kein Domänenkonto) eine in der Warteschlange stehende Nachricht sendet, das Senden eines ungültigen Zertifikats tritt bei.Q: When a network service client (or any client that does not have a domain account) sends a queued message, the send fails with an invalid certificate. Wie kann ich das Problem beheben?How do I fix this?

A: überprüfen Sie die Bindungskonfiguration.A: Check the binding configuration. Für die Standardbindung ist die MSMQ-Transportsicherheit zum Signieren der Nachricht aktiviert.The default binding has MSMQ transport security turned on to sign the message. Deaktivieren Sie sie.Turn it off.

Remote durchgeführte EmpfangsvorgängeRemote Transacted Receives

F: Wenn ich eine Warteschlange auf dem Computer A und ein WCF-Dienst, der liest Nachrichten aus einer Warteschlange auf Computer B (Szenario "die Remote durchgeführter Empfangsvorgänge"), Nachrichten aus der Warteschlange nicht gelesen werden.Q: When I have a queue on machine A, and a WCF service that reads messages from a queue on machine B (the remote transacted receive scenario), messages are not read from the queue. Ablaufverfolgungsinformationen gibt an, bei der der Empfang der Nachricht "Transaktion kann nicht importiert werden."Tracing information indicates the receive failed with the message "Transaction cannot be imported." Was kann ich tun, um dieses Problem zu beheben?What can I do to fix this?

A: gibt es drei mögliche Ursachen dafür sind:A: There are three possible reasons for this:

  • Im Domänenmodus ist für remote durchgeführte Empfangsvorgänge ein MSDTC-Netzwerkzugriff (Microsoft Distributed Transaction Coordinator) erforderlich.If you are in domain mode, remote transacted receive requires Microsoft Distributed Transaction Coordinator (MSDTC) network access. Sie können dies mithilfe von Komponenten hinzufügen/entfernen.You can enable this using Add/Remove Components.

    Aktivieren des DTC-NetzwerkzugriffsEnabling network DTC access

  • Überprüfen Sie den Authentifizierungsmodus für die Kommunikation mit dem Transaktions-Manager.Check the authentication mode for communicating with the transaction manager. Wenn Sie im Arbeitsgruppenmodus ausgeführt werden, muss "Keine Authentifizierung erforderlich" ausgewählt.If you are in workgroup mode, "No Authentication Required" must be selected. Wenn Sie im Domänenmodus sind, muss "Gegenseitige Authentifizierung erforderlich" ausgewählt.If you are in domain mode, then "Mutual Authentication Required" must be selected.

    Aktivieren von XA-TransaktionenEnabling XA transactions

  • Stellen Sie sicher, dass MSDTC in der Liste der Ausnahmen in ist die Internetverbindungsfirewall Einstellungen.Make sure that MSDTC is in the list of exceptions in the Internet Connection Firewall settings.

  • Stellen Sie sicher, dass Sie Windows VistaWindows Vista verwenden.Ensure that you are using Windows VistaWindows Vista. MSMQ in Windows VistaWindows Vista unterstützt remote durchgeführte Lesevorgänge.MSMQ on Windows VistaWindows Vista supports remote transacted read. MSMQ in früheren Windows-Releases unterstützt keine remote durchgeführten Lesevorgänge.MSMQ on earlier Windows releases does not support remote transacted read.

F: wird der Dienst beim Lesen aus der Warteschlange Netzwerkdienst, z. B. in einem Web Host, warum ich eine Zugriff verweigert-Ausnahme erhalte wird ausgelöst, wenn aus der Warteschlange zu lesen?Q: When the service reading from the queue is a network service, for example, in a Web host, why do I get an access-denied exception is raised when reading from the queue?

A: Lesezugriff des Netzwerkdiensts muss der Warteschlangen-ACL, um sicherzustellen, dass ein Netzwerkdienst aus der Warteschlange lesen kann hinzugefügt werden.A: Network service read access must be added to the queue ACL to ensure that a network service can read from the queue.

F: können die MSMQ-Aktivierungsdienst zum Aktivieren von Anwendungen auf Grundlage von Nachrichten in einer Warteschlange auf einem Remotecomputer verwenden?Q: Can I use the MSMQ activation service to activate applications based on messages in a queue on a remote machine?

A: Ja.A: Yes. Sie müssen dazu den MSMQ-Aktivierungsdienst als Netzwerkdienst konfigurieren und der Warteschlange auf dem Remotecomputer den Netzwerkdienstzugriff hinzufügen.To do this, you must configure the MSMQ activation service to run as a network service, and add network service access to the queue on the remote machine.

Verwenden von benutzerdefinierten MSMQ-Bindungen mit aktiviertem ReceiveContextUsing Custom MSMQ Bindings with ReceiveContext Enabled

Bei Verwendung einer benutzerdefinierten MSMQ-Bindung mit aktiviertem ReceiveContext wird eine eingehende Nachricht mit einem Thread aus einem Threadpool verarbeitet, da das systemeigene MSMQ keine E/A-Vervollständigung für den asynchronen ReceiveContext-Empfang unterstützt.When using a custom MSMQ binding with ReceiveContext enabled processing an incoming message will use a thread pool thread because native MSMQ does not support I/O completion for asynchronous ReceiveContext receives. Dies liegt daran, dass bei der Verarbeitung einer solchen Nachricht interne Transaktionen für ReceiveContext verwendet werden und MSMQ keine asynchrone Verarbeitung unterstützt.This is because processing such a message uses internal transactions for ReceiveContext and MSMQ does not support asynchronous processing. Um dieses Problem zu umgehen, können Sie dem Endpunkt ein SynchronousReceiveBehavior hinzufügen, um die asynchrone Verarbeitung zu erzwingen, oder Sie können MaxPendingReceives auf 1 festlegen.To work around this issue you can add a SynchronousReceiveBehavior to the endpoint to force synchronous processing or set MaxPendingReceives to 1.