IIS7.5下的SignalR webapp不适用于其他webapp的Firefox访问(跨域)

时间:2013-10-28 13:06:54

标签: javascript asp.net .net iis-7.5 signalr

我正在IIS 7.5下测试SignalR(1.1.0)聊天示例。

我正在尝试从不同的webapp连接到我的SignalR webapp(跨域)。

我已经在web.config上进行了跨域配置,这在asp.net开发服务器上工作正常,并且在global.asax上启用了cors。

但是,当我将此项目部署到IIS 7.5时,这不起作用。然后我注意到它只适用于IE 8,而不适用于Firefox。

我建立了如下连接:

        var connection = $.hubConnection('http://my.webserver.ip/sincronismoSR'),
            chatHubProxy = connection.createHubProxy('chatHub');

        connection.start().done(function() {
                $('#sendmessage').click(function () {
                chatHubProxy.invoke('Send', $('#displayname').val(), $('#message').val());
                $('#message').val('').focus();
            });
        });

我看了一下请求,得到了200响应,但答案是空的。

2 个答案:

答案 0 :(得分:5)

Claudio,我们在一个项目中使用SignalR,它运作得非常好。不幸的是,我的研究不够好。我认为当浏览器支持它时,SignalR是websockets,但事实上我们从未在自2008年R2服务器上运行.NET 4.0以来就没有过websockets。

SignalR websocket传输需要.NET 4.5,IIS8,02012Server / Win8,但我们的项目尚未接受。

我环顾四周,在.NET堆栈上找到了一些替代方案。最后我们决定使用xsockets.NET(http://xsockets.net)并且从那以后就没有回头了。 从SignalR移动到xsockets非常容易,xsockets在所有平台上都支持websocket。还支持Mono。

唤醒我们的是signalr和xsocket之间的比较:http://xsockets.net/xsockets-vs-signalr

但SignalR上没有阴影。由于服务器要求,它是一个很好的选择但不适合我们。不好的是,社区似乎一直认为SignalR是实时的。但正如我所说的那样,我们只能责备自己,因为我们没有读好文档并且看了很多时间:(

祝你好运

答案 1 :(得分:1)

我找到了解决方案,但我不明白为什么,当我使用Firefox时,如果我没有设置,它就不会选择正确的传输。

    var connection = $.hubConnection('http://my.webserver.ip/sincronismoSR'),
        chatHubProxy = connection.createHubProxy('chatHub');

    connection.start({ transport: ['webSockets', 'longPolling'] }).done(function() {
            $('#sendmessage').click(function () {
            chatHubProxy.invoke('Send', $('#displayname').val(), $('#message').val());
            $('#message').val('').focus();
        });
    });

所以,这个{ transport: ['webSockets', 'longPolling'] }配置解决了我的问题。