2012-12-10 6 views
6

私のハブでOnConnectedおよびOnDisconnectedの上書きが問題になりました。レプリケーションの目的のためにSignalR OnConnectedおよびOnDisconnectedが起動しない

は、私は非常に単純なハブを持っている:

public class OnlineHub : Hub 
{ 
    public void TestMethod() 
    { 
     var a = 1; 
    } 

    public override System.Threading.Tasks.Task OnConnected() 
    { 
     return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public override System.Threading.Tasks.Task OnDisconnected() 
    { 
     return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 

そして、aspxページ:

<script type="text/javascript"> 
    $(function() { 
     $("#btn").click(function() { 
      $.connection.onlineHub.server.testMethod(); 
     }); 

     $.connection.onlineHub.server.connected = function (id, date) { 
      $("#results").append("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.server.disconnected = function (id, date) { 
      $("#results").append(("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.connection.start(); 
    }); 

</script> 

私はjQueryの1.6.4を使用していますし、シグナルR 1.0.0-α2。クライアント側の接続メソッドと切断メソッドは実行されていません。また、OnConnectedまたはOnDisconnectedにブレークポイントを置くと、ブレークポイントにヒットしません。

TestMethodがokを呼び出し、signalRのネゴシエーションコールからconnectionIdが戻ってきて接続が確立されています。

私は何か簡単なことがないと確信しています。

ありがとうございます。

答えて

11

クライアント・ハンドラは、おそらく次のようになります。

$.connection.onlineHub.client.connected = function(){...} 
+0

このケースでは、私がそれをやっている方法は、それがハンドラではなく、サーバが呼び出せるメソッドの定義であるため正しいです。とにかくおかげで。 :) – DavidGouge

+2

私は本当に私が正しいと確信しています! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

私にとってはうまくいかない。 https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

はそれを考え出しました。だから、signalRが持っていない場合は何もOnDisconnectedまたはOnConnected内のタスク用に定義されたように見えます

$.connection.onlineHub.server.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.server.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

$.connection.onlineHub.client.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.client.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

をする必要があります:私はクライアントではなくサーバーのオブジェクトのメソッドを呼び出していました、彼らは解雇されません。どちらが理にかなっている。

+4

彼は正しかったので、@ダンカンの答えは良いとマークする必要があります! – billy

+1

彼は30分早くそれを投稿したので、正解は@ Duncan'sです! –

+3

はい、3年以上前の質問でこのようなプロンプトでチャイミングするための@Matei_Raduに感謝します。このサイトはあなたがいなくてもどこですか? – DavidGouge

5

また、スクリプトでは、ハブでイベントを発生させるために少なくとも1つのクライアントコールバックを定義する必要があることが判明しました。 OnConnectedとOnDisconnectedが呼び出されると、これに注意してください。

+0

またこちらをご覧くださいhttps://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signalr –

関連する問題