我有一个以前使用wsDualHttpBinding的双工WCF Web服务。我试图将其切换到Web套接字(netHttpBinding),以便它可以通过Web浏览器客户端使用。JavaScript客户端和WCF服务之间的WebSocket握手失败
WebSocket connection to 'ws://localhost:8888/CallbackService' failed: Error
during WebSocket handshake: Unexpected response code: 400
WCF配置:
<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代码:
var url = 'ws://localhost:8888/CallbackService';
var socket = new WebSocket(url); // error
我已经启用WCF跟踪
我试图实例化的WebSocket对象时出现以下错误 - 日志显示正在接收的字节,但没有错误。开发工具中的websocket升级请求会显示错误的请求响应,表示升级失败。这是在带有IIS 8的Windows 10机器上,并且我已检查启用了WebSocket协议是。
Web服务确实使用.NET控制台客户端(使用DuplexChannelFactory<>
)。我只在浏览器中使用JS WebSocket得到这个错误。从开发工具
请求/响应跟踪:
我该如何解决或获取关于此错误的详细信息?
您尝试连接到端口8888,但来源是1646? – Luke
localhost:8888是Web服务运行的地方,localhost:1646是服务于客户端页面的Web服务器。这是一个交叉来源问题吗? –
检查您是否可以使用ip而不是localhost进行连接。例如ws://192.168.0.1:8888/CallbackService – Luke