2011-07-08 4 views
1

こんにちは私はC#.NetソリューションでWebアプリケーションとコンソールアプリケーションを持っています。私は自分のWebアプリケーションからコンソールアプリケーションでReverseServiceクラスを呼び出そうとしています。.Net WebSocketプロトタイプ... Javascriptのトラブルオープン接続

var host = new WebSocketsHost<ReverseService>(new Uri("ws://localhost:4502/reverse")); 
host.AddWebSocketsEndpoint(); 
host.Open(); 
Console.ReadLine(); 

私は12

if (window.WebSocket) { 
      //establishes websocket connection 
      websocket = new WebSocket('ws://localhost:4502/reverse'); 

      websocket.onopen = function() { 
       $('body').append('Connected.'); 

       $('#inputbox').keyup(function() { 
        websocket.send($('#inputbox').val()); 
       }); 
      }; 

      websocket.onclose = function() { 
       $('body').append('Closed.'); 
      } 

      websocket.onmessage = function (event) { 
       $('#outputbox').val(event.data); 
      }; 
     } 
Chromeで次のJavaScriptコードで自分のWebアプリケーションからこのWebSocketEndpointを呼び出すしようとしています:静的な無効メイン機能でコンソールアプリケーションでは、私は、次のコードを実行しています

websocket.onclose関数は実際に呼び出されますが、websocket.onopen関数は決して呼び出しません。私はグーグルでこれを見ましたが、役に立たなかったとしても、どんな助けも大歓迎です。

+0

'websocket.onerror'を実装 - 。それはあなたが私がwebsocket.onerror =機能(EVT){ \t \t \t \t \t $( '体')を追加問題 –

+0

は何を見るのを助けるかもしれない(EVTを追加します。データ); \t \t \t \t};それは私がChrome 12でブレークポイントを設定し、oncloseブレークポイントがヒットしたときヒットしたことはありません – Lizzard

答えて

0

このエラーは、クライアントとサーバーのプロトコルバージョンの間にほぼ間違いがあります。 HTML5 labs prototypeを使用しているようです - 最新のバージョンを使用している場合、サーバーがWebSocket hybi-09を話しています。 Chromeはプロトコルのかなり古いバージョンを実装しています(私はそのhixie-76だと思いますが、私は確信していません)。

あなたのオプションは以下のとおりです。

  • 異なるクライアントの実装を使用しhixie-76
  • を実装のWebSocketサーバーを使用してください。たとえば、HTML5ラボのプロトタイプで提供されている実装を使用できます。 JavaScriptラッパーを備えたSilverlightプラグインです。いくつかのスクリプトを組み込み、new WebSocketの代わりにnew WebSocketDraftを使用する必要があります。また、wwwrootにclientaccesspolicy.xmlファイルをドロップする必要があります。詳細については、プロトタイプのreadmeファイルを参照してください。詳細についてはサンプルの一部を見てください。
+0

あなたの返信のおかげでありがとう。 Silverlight.jsとjquery.slws.jsのjavascriptファイルをMicrosoft.ServiceModel.WebSockets.xapファイルとともに追加しました。私はIE9のブラウザで何も手に入れませんでしたが、今はChromeと同じ機能を利用しています。 websocket.oncloseイベントは呼び出されますが、onopenは呼び出されません。 Chromeがwindow.WebSocketを認識しているにもかかわらず、新しいWebSocketDraftを使用しようとしましたが、同じ機能が引き続き使用されています。また、ダウンロードしたサンプルとプロトタイプだけで、wwwrootにclientaccesspolicy.xmlファイルがありません。 – Lizzard

+0

また、もし私がローカルですべてをやっていたらどうですか?いずれにせよ、あなたの返事をありがとう、私はそれを閉じて、私はいくつかの方法を壊すことができるかどうかを確認します。 – Lizzard

+0

あなたは "私のwwwrootにclientaccesspolicy.xmlファイルがない"と言った。それは誤ったタイプですか、あなたはそれを持っていますか? 'http:// localhost/clientaccesspolicy.xml'にアクセスしてアクセスできることを確認しましたか? –

0

プロトコルハンドシェイクを監視するためにTCPパケットスニファを使用してください。 2つのプロトコルで

成功したテスト:

  1. hybi-00/hixie-76:Firefoxの5.0、Safariの5.1.1利用秒-のWebSocket-キー1 /キー2と、この古いプロトコル... ありますC#のいくつかのフリーサーバーのソースコード。 たとえば、WebSocket76English.zipを検索します。 iPhoneのSafariでも動作します。

  2. hybi-06:Firefox 7.0、Chrome 14はSec-WebSocket-Keyで最後のプロトコルを使用しています。 最後の.Net WebSocketプロトタイプは、そのプロトコルを使用します。

誰かが古いプロトコルhybi-00をサポートするWebSocketプロトタイプのバージョンを持っている場合は、私にお知らせください。

最後の仕様ドラフトでは、サーバーがいくつかのプロトコルをサポートし、対応するバージョンをSec-WebSocket-Versionフィールドの に伝えることを提案しています。

関連する問題