Wie zu lösen "Die ChannelDispatcher ist nicht in der Lage, um die IChannelListener" Fehler?
Ich versuche, die Kommunikation zwischen WCF-Hosting in Windows-Dienst, und meinen Dienst GUI. Das problem ist, wenn ich versuche, führen OperationContract Methode, die ich bin immer
"Der ChannelDispatcher an
'net.tcp://localhost:7771/MyService'
mit Vertrag(s) """IContract" "' ist
kann nicht geöffnet werden seine IChannelListener."
Meine app.conf sieht so aus:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTcpBinding">
<security>
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:7772/MyService" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior"
name="MyService.Service">
<endpoint address="net.tcp://localhost:7771/MyService" binding="netTcpBinding"
bindingConfiguration="netTcpBinding" name="netTcp" contract="MyService.IContract" />
</service>
</services>
</system.serviceModel>
Port 7771 empfangsbereit ist (überprüft mit netstat) und svcutil erzeugt configs für mich.
Irgendwelche Vorschläge würden geschätzt.
Stack-trace der exception
Server stack trace: at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter) at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Gibt es eine innere Ausnahme (aber nicht unter die Ausnahme.InnerExeption aber unter Ausnahme.Detail.InnerExeption - ToString () - Methode nicht zeigen, dass)
Eine Registrierung bereits vorhanden ist, für URI 'net.tcp://localhost:7771/MyService'.
Aber mein service angegeben haben, das URI nur in app.config Datei auch sonst nirgends. In der gesamten Lösung dieser URI mit dem Wortlaut in den server einmal und einmal einen Kunden.
- Können Sie geben uns eine volle stack-trace mit "theException.ToString()". Dadurch wird die Anzeige aller inneren Ausnahmen. Mit dieser Art von exception es ist manchmal eine andere Ursache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dieser Art von exception es ist die Innere Ausnahme, dass die Informationen, die nützlich ist, um das problem zu diagnostizieren. Dies ist ein eher generischer Fehler, kann verursacht werden durch eine Reihe von verschiedenen Dingen.
Ich es gelöst 😀
Hier ist die explanaition problem:
Erste SCHLECHTE code:
Als, können Sie sehen, der service-Vertrag wird umgesetzt-in-class-hosting-service. Dies verursacht die ganzen Fehler, was (vielleicht typeof() wird ein Konstruktor, weiß ich nicht, ich bin offen für Konstruktive Vorschläge in dieser Angelegenheit).
Den GUTE-code:
Service-Vertrag für beide Dateien:
App.config
Ich wissen, dass Sie das problem bereits gelöst, aber niemand darauf hingewiesen, warum es löste das problem, und was den Fehler verursacht hat. Das Problem w/der erste code war, dass Ihr Programm (Klasse Programm) angegeben, eine offene Aufforderung an die Klasse, die sich "Klasse Programm", in anderen Worten, es ist REKURSIV. Kein Wunder, es gab die nicht in der Lage zu öffnen Sie den listener-Fehler! Dies war eine sehr gute! 🙂
vielleicht der port wird bereits von einem anderen Programm auf Ihrem Computer, wie ein antivirus-Programm? Oder es ist ein Windows-port reserviert. Sie könnten versuchen, Einstellung der port, an so etwas wie 11111?
Ich denke, dieser Teil der Konfiguration wird ignoriert
wenn Sie
Dass ich auf diese Ausnahme aus dem gleichen Grund wie der OP, aber ich konnte mich nicht bewegen meine Dienstleistung ist die Umsetzung in eine neue Klasse. So, ich habe eine andere Lösung gefunden.
ServiceHost
hat eine zweite überladung, nimmt eine Instanz eines Dienstes. So, hier sind die änderungen an den OP 's ' BAD' - code:Sollte es eine
host.Close()
rufen Sie vor dem Aufruf des Dienstes wieder. Daher verwenden Sie try -, catch-und finally-block. Schließen Sie die Verbindung schließlich, bevor Sie den zweiten Anruf.