2016-11-02 3 views
0

ステータス更新がのみがブラウザタブのインスタンスに送信される、SignalR実装の実際の例を見つけるための多くの研究を行ってきました。私のアプリケーションはWebデータを抽出し、そのプロセスには多くの時間がかかります。進行状況更新メッセージは、開いているタブ(ユニークなConnectionid)にのみ送信されます。 SignalR

ステータス更新は送信できましたが、ウェブページを開いているすべてのユーザーにのみ送信できました。私は、しかし、必要性が唯一開いているタブで進捗状況を更新する方法は何

//Server side (works just fine) 
public class SendCustomText : Hub 
{ 
    public string myStatus; 
    public void CurrentStatus() 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<SendCustomText>(); 
     context.Clients.All.setStatus(myStatus); 
    } 
} 

//Client side 
<script type="text/javascript"> 
$(function() { 
    //Declare a proxy to the reference hub 
    var currentStatus = $.connection.sendCustomText; 
    currentStatus.client.setStatus = function (value) { 
     $('#signalr_french_status').text(value.toString()); 
    } 
    $.connection.hub.start().done(function() { 
     $('pandora_french_panel_extract_button').click(function() { 
      currentStatus.server.send(); 
     }) 
    }) 
    $.connection.hub.disconnected(function() { 
     $.connection.hub.start(); 
    }) 
}) 

。ログインしているユーザーが別のタブを開いて別のジョブを処理する可能性があります。その新しいタブには、それ自身の進捗状況が表示されます。

私は接続IDクライアント側を取得し、AJAXを介してサーバーコードに渡すことに成功しました。私は、接続IDがハブ内で使用される例であなたの助けが必要です。

context.Clients.Client(connectionID).setStatus(); 

答えて

0

私はこの問題を自分で解決できました。最初は非常に基本的なエラーでしたが、初めてというキーワードを使用しました。

public class SendCustomText : Hub 
{ 
    public string myStatus; 
    public static string myConnectionID; 

    public void CurrentStatus() 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<SendCustomText>(); 
     context.Clients.Client(myConnectionID).setStatus(myStatus); 
    } 
    public override System.Threading.Tasks.Task OnConnected() 
    { 
     myConnectionID = Context.ConnectionId; 
     return base.OnConnected(); 
    } 
} 
関連する問題