2012-01-07 11 views
1

私は開発中のWebアプリケーション用のカスタムWebサーバーを作成しましたが、.NETソケットを使用しているような奇妙な問題を抱えています。カスタムC#Webサーバーは同時のAjax呼び出しを受け付けることができません

Webページの場合、サーバーは正常に動作しますが、処理時間が長い関数を実行するためにサーバーにajax呼び出しを行うと、サーバーは同じセッションから別のajax呼び出しを受け入れることができません。

プロセスのようなある:

ウェブサイト上のボタンを押して、それが終了すると、「成功」を返す長い操作を実行http://localhost:900/function:indexへのAJAX呼び出しを(私のサーバはこれを認識)を引き起こします。

最初の呼び出しが戻る前にボタンを再度押すと、ブラウザはサーバーと同じ呼び出しを行いますが、今回はSocket.Accept()は新しいソケットを返さず、接続があることを示すこともありません待っている。

しかし、ページをリフレッシュするかリンクをクリックして新しいページをロードすると、期待通りに機能し、ボタンは期待どおりに機能します(操作がまだ進行中であるため、失敗を返します)。 )

既存の同一のAjax呼び出しがまだ処理されている場合、Socket.Accept()は新しいソケットを返しません。

私は困惑しています...なぜこれが起こっているのかについてのアイデアはありますか?

+0

スレッドプールを作成していますか? –

+0

私はスレッドプールを使用していますが、サーバーが実際に接続を受け入れるまでではないため、スレッドプールはまだ起動していません。 –

+1

あなたのスレッディングモデルが正しく設定されていないかのように聞こえますが、以前のようなカスタムリスナーを作成しようとはしていません。なぜこれのためにIISを使用しないでしょうか?このタイプのもののために特別に設計されています。 –

答えて

0

答えはブラウザに表示されているようです。任意の時間引数をURLの最後に追加することで、すべての要求が一意になるようになりました。

何らかの理由で、ブラウザは同時に2つのajaxコールを同時に送信しません。

+0

ブラウザは、キャッシュされた結果が出る可能性があると考えていたため、実際には一度だけサーバーと話しました。おそらく、あなたは "expires"ヘッダーを追加することができますか? * shrug * – jklemmack

+0

これは考えですが、なぜ最初の呼び出しが返されるとすぐに再び機能しますか? –

関連する問題