JobsServer: Windows Server 2008 R2 .NET Version: 4.5
Ich verwende WCF, um zwei Server zu verbinden - app y Warteschlange . Ich möchte app um Nachrichten senden/empfangen zu können von Warteschlange . Aus irgendeinem Grund kann die App Nachrichten senden, aber NICHT empfangen.
Die netMsmq-Bindung sieht wie folgt aus:
<binding name="JobExecutionerBinding" receiveErrorHandling="Move">
<security>
<transport msmqAuthenticationMode="None" msmqProtectionLevel="None" />
</security>
</binding>
Und die Dienstbindung
Jetzt sieht die Client-Bindung wie folgt aus:
<endpoint address="net.msmq://queue/private/jobs"
binding="netMsmqBinding"
bindingConfiguration="JobExecutionerBinding"
contract="JobExecution.Common.IJobExecutionService"
name="SimpleEmailService"
kind=""
endpointConfiguration=""/>
Zur Sicherheit habe ich ein paar Namen geändert.
Der WC-Client kann also ohne Probleme an die entfernte Warteschlange senden. Er stellt die ausgehende Nachricht sogar ordnungsgemäß in eine Warteschlange und leitet sie später weiter, falls der Server der entfernten Warteschlange ausfällt. Aber jedes Mal, wenn ich den WCF-Dienst starte, erhalte ich diese Meldung:
Es ist ein Fehler beim Öffnen der Warteschlange aufgetreten. Stellen Sie sicher, dass MSMQ installiert ist installiert ist und läuft, die Warteschlange existiert und eine entsprechende Berechtigung zum Lesen hat. Die innere Ausnahme kann zusätzliche Informationen enthalten. ---> System.ServiceModel.MsmqException: Beim Öffnen der Warteschlange ist ein Fehler aufgetreten Warteschlange: Die Warteschlange existiert nicht oder Sie haben nicht genügend Berechtigungen, um den Vorgang durchzuführen. (-1072824317, 0xc00e0003). [ ] Nachricht kann nicht von der Warteschlange gesendet oder empfangen werden. Stellen Sie sicher, dass MSMQ installiert ist und läuft. Stellen Sie außerdem sicher, dass die Warteschlange zum Öffnen verfügbar ist mit dem erforderlichen Zugriffsmodus und der erforderlichen Berechtigung. unter System.ServiceModel.Channels.MsmqQueue.OpenQueue() bei System.ServiceModel.Channels.MsmqQueue.GetHandle() bei System.ServiceModel.Channels.MsmqQueue.SupportsAccessMode(String formatName, Int32 accessType, MsmqException& msmqException) --- Ende der inneren Ausnahme-Stacktrace --- bei System.ServiceModel.Channels.MsmqVerifier.VerifyReceiver(MsmqReceiveParameters receiveParameters, Uri listenUri) bei System.ServiceModel.Channels.MsmqTransportBindingElement.BuildChannelListener[TChannel](BindingContext context) at System.ServiceModel.Channels.Binding.BuildChannelListener[TChannel](Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, BindingParameterCollection parameters) at System.ServiceModel.Description.DispatcherBuilder.MaybeCreateListener(Boolean actualCreate, Type[] supportedChannels, Binding binding, BindingParameterCollection parameters, Uri listenUriBaseAddress, String listenUriRelativeAddress, ListenUriMode listenUriMode, ServiceThrottle throttle, IChannelListener& result, Boolean supportContextSession) bei System.ServiceModel.Description.DispatcherBuilder.BuildChannelListener(StuffPerListenUriInfo stuff, ServiceHostBase serviceHost, Uri listenUri, ListenUriMode listenUriMode, Boolean supportContextSession, IChannelListener& result) bei System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) bei System.ServiceModel.ServiceHostBase.InitializeRuntime() at
Ich bin seit 8 Stunden überall auf StackOverflow und im Internet unterwegs. Hier ist, was ich getan habe:
- Sicherstellen, dass ANONYMOUS LOGIN, Everyone, Network, Network Service und Local Service volle Kontrolle haben
- Ich habe den entfernten MSMQ-Server gestoppt und beobachtet, was der WCF-Dienst tut, und ich erhalte eine andere Fehlermeldung - ich bin also sicher, dass der WCF-Dienst beim Starten mit dem MSMQ-Server spricht
- Deaktivieren Sie die Windows-Firewall auf beiden Rechnern und öffnen Sie alle Ports über EC2-Sicherheitsgruppen.
- Setzen Sie AllowNonauthenticatedRpc und NewRemoteReadServerAllowNoneSecurityClient in der Registrierung auf 1
- MS DTC auf beiden Servern konfiguriert (die Warteschlange ist transaktional, aber ich erhalte die gleiche Fehlermeldung unabhängig davon, ob die Warteschlange transaktional ist oder nicht)
- Bestätigt, dass der WCF-Server startet gut, wenn ich die lokale Warteschlange verwenden, und empfängt ohne ein Problem
Hilfe!!! Ich kann meine Anwendung ohne eine Remote-Queueing-Lösung nicht skalieren.