Tamim Al Manaseer
Tamim Al Manaseer

Reputation: 3724

SignalR Connect Returns 504

I have a weird behavior going on with SignalR, I have a hub defined like so:

public class NotificationHub : Hub
{
     //Empty
}

on my js I have the following:

function blabla {
    // bla bla

    $.connection.NotificationHub.client.AppendNewStory = function (story) {

        // appends a new story, long jquery code
    };

    $.connection.hub.start().done(function () {
         _ConnectionStarted = true; // there must be some built in way  
    });
}

I call js from a class on my mvc project

public SomeClass
{
    private IHubContext _context;

    public SomeClass()
    {
        _context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
    }

    public void Notify(SomeData ...)
    {
        _context.Clients.User(userId).AppendNewStory(data);
    }
}

Problem has two symptoms:

  1. Server to client class fail intermittently (can't figure out a scenario).
  2. My web server seems to get VERY SLOW, subsequent ajax calls and regular webrequests timeout.

Using fiddler I found the following:

  1. SignalR/hubs call succeeds.
  2. SignalR negotial call succeeds.
  3. connect with WebSockets transport failed with HTTP 504!
  4. subsequent connect calls try foreverFrame and long polling, both succeed with 200.
  5. a poll request is issued and NEVER RETURNS! after that everything becomes slow or hangs.

Something that might aid the debugging, server hangs if i'm opening 2 tabs or more. a single tab seems ok.

I'm also using IE 11 and chrome, same problem except chrome tries serverSentEvents instead of foreverFrame.

Any ideas on how to debug this issue, see why I get 504? or why the server hangs? I have Windows 8.1 Update 1, IIS 8, SignalR 2.0, .NET 4.5.1.

Upvotes: 1

Views: 2482

Answers (4)

Tamim Al Manaseer
Tamim Al Manaseer

Reputation: 3724

Ok thanx to everyone who answered, you all helped debug the issue, unfortunately nothing worked.

problem turned out I needed to set the targetFramework attribute in web.config:

<httpRuntime targetFramework="4.5.1">

Everything worked smoothly afterwards.

Upvotes: 0

Ken Smith
Ken Smith

Reputation: 20445

One possibility that you'll want to investigate is whether you're running into a limit on the number of connections allowed to IIS. I'm not sure whether websocket connections are included in that limit, but normal connections - and a long polling connection will consume one of those - are typically limited to "3" on a the "Basic" version of Windows 8 (and are limited to 10 on the Professional and other versions). I'm guessing that your long polling connection(s) are consuming all the available connections, and that's what is causing everything else to time out.

See here for more details:

http://www.jpelectron.com/sample/WWW%20and%20HTML/IIS-%20OS%20Version%20Limits.htm

I'd either upgrade to Professional (if you're already at "Professional", then discount this answer), or install Websockets and see if that helps things.

Upvotes: 0

KingOfHypocrites
KingOfHypocrites

Reputation: 9537

Did you install WebSockets in Windows 8.1? Do this under add/remove features. I had similar random issues connecting until I did this. I also had to enable the following setting in the web.config:

<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true"/>

Upvotes: 2

kevindaub
kevindaub

Reputation: 3363

Is there anything in between your server and browser. Some proxies have trouble with web sockets and server sent events. Try choosing the transports in the javascript. I saw similar things with Firefox over OpenIG. OpenIG didn't like server sent events and just hung.

Upvotes: 1

Related Questions