2011-01-02 14 views
1

非常に簡単なチャットアプリケーションを作成しています。これには、フロントエンドとしてのASP.NET Webページと、メッセージをデータベースに格納するためのバックエンドとしてのWCFサービスがあります。チャットメッセージを継続的に更新する

1つのこと以外はすべて機能します。ブラウザAがチャットメッセージを入力すると、できるだけ早くブラウザBにメッセージを表示させたい(ええ、それはチャットの目的です)。

<asp:Timer ID="chatTimer" runat="server" OnTick="chatTimer_Tick" Interval="1000" /> 

この最善のアプローチですかあります:タイマーを使用しています

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="chatTimer" EventName="Tick" /> 
</Triggers> 

:私はこれまで何をやったか

はセットアップには、このようなのUpdatePanel内のトリガーであり、メッセージの更新を達成するためのより良い、しかし単純な方法です。このソリューションの欠点の1つは、チャットメッセージを入力するために使用されるテキストボックスが、Tickイベントが実行されるたびにフォーカスが失われることです。

メッセージの更新に関するご意見やアドバイスをいただければ幸いです。

ありがとうございました!

+0

あなたは銀色でこれを行うと考えましたか?毎秒更新を取り込むのではなく、ソケットを利用してクライアントに更新をプッシュすることができます。 – Juliet

+0

現時点では、私はしていません。同時に、あなたの提案は本当に素晴らしいと思います。これは実際に私がやりたいことです。 – Daniel

答えて

2

HTTPプロトコルはサーバープッシュをサポートしていないため、変更をサーバーにポーリングする必要があります。これを行うにはさまざまな方法がありますが、それらは皆あなたがしていることに似ています。

UpdateMode="Conditional"を設定することで、アップデートパネルのアップデートをオプションにすることができます。これにより、タイマーティックごとに更新されずにフォーカスが失われます。これは、サーバ側でUpdateメソッドを呼び出すと更新されます。

+0

ありがとう、私が探していた答えの種類。つまり、サーバープッシュはASP.NETでは使用できません。 – Daniel

+0

@ダニエル:はい、しかし、それはASP.NETフレームワークではなく、制限であるHTTPプロトコルです。 :) – Guffa

2

Cometは、この種のシナリオで使用される手法です。私はそれが簡単だとは言わないが。

基本的に、クライアントはサーバーに長い期間開いている接続を保持し、サーバーはデータをブラウザーにプッシュできます。

この質問は関連している:あなたはWCFを使用している場合Comet implementation for ASP.NET?

1

あなたは他のクライアントからのメッセージが到着するたびに、サーバーが呼び出すCallbackContractを実装することができます。

+0

しかし、コールバック契約はかなりクライアント側で実装するのは難しいでしょうか? –

+0

なぜそれは難しいと言いますか? –

+0

これは、NetTcpBindingとNetNamedPipeBindingでのみ実行できます。私はブラウザがそれをサポートするとは思わない。彼はクライアント(ブラウザ)と通信するためにWCFを使用していません。 – Iain

関連する問題