Reputation: 1701
I have a .Net MVC web application and I am using SignalR to implement a progress bar functionality.
I have a View that is making an Ajax POST to an action using JQuery:
$.ajax({
url: actionUrl,
type: 'POST',
data: { ids: ids },
success: function (data) {
...
}
});
The Controller is procesing information inside a loop, and every n iteration is sending a message using signalr to a Hub. The client is connected to the Hub and updates a progress bar with the information in the messages.
I open the connection to the signalr hub with this code:
var connection = new HubConnection("http://localhost/");
connection.Credentials = CredentialCache.DefaultNetworkCredentials;
this.proxy = connection.CreateHubProxy("progressHub");
connection.Start().Wait();
And then send the information with this:
proxy.Invoke("ProgressChanged", taskId, progress);
This is working correctly for the first two updates, but from that on it is not working anymore until the end of the long process, when I receive all the remaining messages. I am receiving something like this:
0% complete
5% complete
... (long pause as the process completes)
10%, 15%, 20%, 25%, etc (all these messages come together)
It is always the first two messages, not a random number of messages.
Do you know any configuration that I may be missing?
I tried adding a sleep after each message and making the action async and adding .Wait() to each message, but it is always the same behaviour.
I tried it in IISExpress and full IIS 8.
Upvotes: 0
Views: 1056
Reputation: 1171
Your action method in the controller should be async and call an asynchronous Task. My guess is that while your ajax call is waiting for completion, the call made by signalR are probalby queued until your proccess is complete and end the ajax request.
Upvotes: 1