【发布时间】:2017-07-27 13:44:44
【问题描述】:
我有一个以前使用 wsDualHttpBinding 的现有双工 WCF Web 服务。我正在尝试将其切换到 Web Sockets (netHttpBinding),以便可以通过 Web 浏览器客户端使用它。
尝试实例化 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 升级请求显示 Bad Request 响应,表示升级不成功。这是在装有 IIS 8 的 Windows 10 机器上,我检查了 WebSocket 协议已启用。
Web 服务确实与 .NET 控制台客户端(使用 DuplexChannelFactory<>)一起工作。我只在浏览器中使用 JS WebSocket 得到这个错误。
来自开发工具的请求/响应跟踪:
如何解决或获取有关此错误的更多信息?
【问题讨论】:
-
您尝试连接到端口 8888 但来源是 1646?
-
localhost:8888 是运行 Web 服务的位置,localhost:1646 是为客户端页面提供服务的 Web 服务器。这是一个跨域问题吗?
-
检查是否可以使用 ip 而不是 localhost 进行连接。例如 ws://192.168.0.1:8888/CallbackService
-
@Luke 恐怕同样的错误,
标签: javascript wcf websocket