SignalR recording when a Web Page has closed

Posted by Benjamin Rogers on Stack Overflow See other posts from Stack Overflow or by Benjamin Rogers
Published on 2012-04-30T06:09:29Z Indexed on 2012/08/29 21:39 UTC
Read the original article Hit count: 455

Filed under:

I am using MassTransit request and response with SignalR. The web site makes a request to a windows service that creates a file. When the file has been created the windows service will send a response message back to the web site. The web site will open the file and make it available for the users to see. I want to handle the scenario where the user closes the web page before the file is created. In that case I want the created file to be emailed to them.

Regardless of whether the user has closed the web page or not, the message handler for the response message will be run. What I want to be able to do is have some way of knowing within the response message handler that the web page has been closed. This is what I have done already. It doesnt work but it does illustrate my thinking. On the web page I have

$(window).unload(function () {
            if (event.clientY < 0) {
                // $.connection.hub.stop();
                $.connection.exportcreate.setIsDisconnected();
    }
});

exportcreate is my Hub name. In setIsDisconnected would I set a property on Caller? Lets say I successfully set a property to indicate that the web page has been closed. How do I find out that value in the response message handler. This is what it does now

    protected void BasicResponseHandler(BasicResponse message)
    {
        string groupName = CorrelationIdGroupName(message.CorrelationId);

        GetClients()[groupName].display(message.ExportGuid);
    }

    private static dynamic GetClients()
    {
        return AspNetHost.DependencyResolver.Resolve<IConnectionManager>().GetClients<ExportCreateHub>();
    }

I am using the message correlation id as a group. Now for me the ExportGuid on the message is very important. That is used to identify the file. So if I am going to email the created file I have to do it within the response handler because I need the ExportGuid value. If I did store a value on Caller in my hub for the web page close, how would I access it in the response handler.

Just in case you need to know. display is defined on the web page as

            exportCreate.display = function (guid) {
                setTimeout(function () {
                    top.location.href = 'GetExport.ashx?guid=' + guid;
                }, 500);
            };

GetExport.ashx opens the file and returns it as a response.

Thank you,

Regards Ben

© Stack Overflow or respective owner

Related posts about signalr