Ich habe einen vorhandenen Duplex-WCF-Webdienst, der zuvor wsDualHttpBinding verwendet hat. Ich versuche, dies auf Web-Sockets (netHttpBinding) umzustellen, so dass es über einen Web-Browser-Client verwendet werden kann.WebSocket-Handshake zwischen JavaScript-Client und WCF-Dienst fehlgeschlagen
bekomme ich folgende Fehlermeldung beim Versuch das WebSocket-Objekt zu instanziiert:
WebSocket connection to 'ws://localhost:8888/CallbackService' failed: Error
during WebSocket handshake: Unexpected response code: 400
WCF Config:
<system.serviceModel>
<services>
<service name="CallbackTestWebService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8888" />
</baseAddresses>
</host>
<endpoint address="CallbackService" binding="netHttpBinding" contract="CallbackTestWebService" />
<endpoint address="http://localhost:8888/mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
JS-Code:
var url = 'ws://localhost:8888/CallbackService';
var socket = new WebSocket(url); // error
Ich habe aktiviert WCF Tracing - Die Logs zeigen Bytes empfangen, aber keine Fehler. Die Websocket-Aktualisierungsanforderung in Entwicklungstools zeigt eine ungültige Anforderung an, die eine fehlgeschlagene Aktualisierung darstellt. Dies ist auf einem Windows 10-Computer mit IIS 8 und ich habe überprüft, dass das WebSocket-Protokoll aktiviert ist.
Der Webdienst funktioniert mit einem .NET-Konsolenclient (mit DuplexChannelFactory<>
). Ich bekomme diesen Fehler nur mit JS WebSocket im Browser.
Request/Response-Spur von Entwickler-Tool:
Wie kann ich lösen oder weitere Informationen zu diesem Fehler erhalten?
versuchen Sie Verbindung mit Port 8888, aber Ursprung ist 1646? – Luke
localhost: 8888 ist der Ort, an dem der Webdienst ausgeführt wird. Localhost: 1646 ist der Webserver, der die Clientseite bedient hat. Ist das ein ursprungsübergreifendes Problem? –
Überprüfen Sie, ob Sie eine Verbindung herstellen können, indem Sie ip anstelle von localhost verwenden. zum Beispiel ws: //192.168.0.1: 8888/CallbackService – Luke