Pergunta

I am new to SignalR and trying to implement long running result pooling. I have added JS to my ASP.NET MVC app and created bug class.

JS

  <script type="text/javascript">
        var message= $.connection.messageHub;
        $(function () {
            message.addMessage = function (htmlstring) {            
                alert(htmlstring);
            };

            $.connection.hub.start(function () {
                message.longRunningMethod('@HttpContext.Current.Session.SessionID');
            });        
        });
    </script>

c# code

[HubName("messageHub")]
public class MessagesHub : Hub
{
public void longRunningMethod(string sessionId)
{
   var repeatChecking = 0;
   while (repeatChecking < 3000000)
       {
          Caller.addMessage("Test");
          repeatChecking++;
          Thread.Sleep(TimeSpan.FromSeconds(1));                        
       }
}
}

The code works fine but there is one problem. Every time the same user refresh web page new Hub class is created and new longRunningMethod method is executed. I would like to resume connection and attach to the same hub instance and resume receiving messages. Could anyone explain how to implement this?

Foi útil?

Solução

Hubs are created and destroyed very frequently so never put any data that you expect to last on them (unless it's static).

I'm not quite sure why you're looking to have a long running method that can take in data (because SignalR is always up and available to take in/handle data) but here's how you can do it:

Checkout the SignalR stock ticker example (you can pull it in via Nuget). It creates a single instance class that fires up a timer. That timer is used to broadcast data down to the clients. https://github.com/SignalR/SignalR-StockTicker

You can also check out ShootR. It's a multiplayer game built with SignalR that does much of the same. Creates a background timer that acts as the game loop on the server and then pushes data down to clients. https://github.com/NTaylorMullen/ShootR

Ultimately your solution will involve either making a singleton or a static timer that acts as your "long" running method.

Hope this helps!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top