2012-02-27 7 views
0

DBの更新時にプロジェクトカウンタを更新する必要があるウェブサイトを構築しています。これまでどんなユーザーでも新しいプロジェクトを追加すると、プロジェクトカウンタが自動的にブラウザで更新されるはずですが、サーバーに何度もAjaxリクエストを送信してDBからカウントを取得し、Webブラウザのカウンターを更新することはありません。サーバにリクエストを送信せずにカウンタを更新するには

私は自動的にリフレッシュするページなしまたは任意のAJAXリクエストを送信する「Facebookの通知が更新どのように」似た何かをしたい、私はそこにいくつかのプッシュ技術を使用して、それがどのように動作するか私はわからないされている知っています。

これを達成するためにいくつかのサンプルコードが提供されているのは素晴らしいことです。

ありがとう...

答えて

1

SignalRの使用を検討しましたか?

http://www.hanselman.com/blog/AsynchronousScalableWebApplicationsWithRealtimePersistentLongrunningConnectionsWithSignalR.aspx

http://signalr.net/

ここではいくつかのSO返信や上記の記事を読んだ後、迅速なPOCに基づくサンプルコードです。それが役に立てば幸い。

  • コードを次のようにUserCounter.csを追加NuGet

  • 経由SignalRのパッケージを追加し、新しい空のASP.NET Webアプリケーションプロジェクトを作成します。ハブベースクラスからクラスを継承するだけです。

    using SignalR.Hubs; 
    public class UserCounter : Hub { } 
    
  • 次のコードではDefault.aspxを追加します。次のコードでUpdateNoOfUsers.aspxを追加

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    </head> 
    <body> 
        <form id="form1" runat="server"> 
         <div> 
          Number of users currently online - <b><span id="noOfUsers">0</span> users</b> 
          <br /> 
          <a target="_blank" href="UpdateNoOfUsers.aspx">Change number of users</a> 
         </div> 
        </form> 
        </body> 
        <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script> 
        <script src="Scripts/jquery.signalR.js" type="text/javascript"></script> 
        <script src="/signalr/hubs" type="text/javascript"></script> 
    
        <script type="text/javascript"> 
        $(function() { 
         var usc = $.connection.userCounter; 
    
         usc.noOfUsersUpdated = function (message) { 
          $('#noOfUsers').text(message); 
         }; 
    
         $.connection.hub.start(); 
        }); 
    </script> 
    
    </html> 
    
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    </head> 
        <body> 
         <form id="form1" runat="server"> 
          <div> 
           No. of users: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
           <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
          </div> 
         </form> 
        </body> 
        </html> 
    
  • はボタン - のためのイベントハンドラを追加します。 UpdateNoOfUsers.aspxのボタンをクリック

    using SignalR; 
    using SignalR.Infrastructure; 
    using SignalR.Hosting.AspNet; 
    
    protected void Button1_Click(object sender, EventArgs e) 
    { 
        IConnectionManager connectionManager = AspNetHost.DependencyResolver.Resolve<IConnectionManager>(); 
        dynamic clients = connectionManager.GetClients<UserCounter>(); 
        clients.noOfUsersUpdated(TextBox1.Text); 
    } 
    
  • を実行し、新しいブラウザウィンドウを開くリンク「ユーザーの変更番号」に起動ページとして

  • をクリックし、「Default.aspxを」を設定した後、アプリケーション

  • は、テキスト内の数字を入力します。 -boxをクリックしてボタンをクリックすると、ベースウィンドウの値の変更が表示されます。このページを他のブラウザで開き、同じ動作を見てください!

関連する問題