以前にwsDualHttpBindingを使用していた既存のデュプレックスWCF Webサービスがあります。これをWeb Sockets(netHttpBinding)に切り替えて、Webブラウザクライアントから使用できるようにしようとしています。JavaScriptクライアントとWCFサービスの間でWebSocketハンドシェイクが失敗しました
の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トレースを有効にしています - ログには受信中のバイトが表示されますが、エラーはありません。 devsツールのwebsocketアップグレード要求は、失敗したアップグレードを表すBad Request応答を表示します。これはIIS 8搭載のWindows 10マシン上にあり、Webソケットプロトコルはが有効であることを確認しました。
Webサービスは、.NETコンソールクライアント(DuplexChannelFactory<>
を使用)で動作します。私はブラウザでJS WebSocketを使用してこのエラーを取得します。開発ツールから
要求/応答トレース:
どのように解決するか、このエラーの詳細情報を得ることができますか?
ポート8888に接続しようとしましたが、原点は1646ですか? – Luke
localhost:8888はWebサービスが実行されている場所、localhost:1646はクライアントページを提供したWebサーバーです。これはクロスオリジンの問題ですか? –
localhostの代わりにipを使用して接続できるかどうかを確認します。例えばws://192.168.0.1:8888/CallbackService – Luke